Results Study 1: Self-Improvement and Self-Acceptance as Mechanisms of Positive Personality Change

Author

[blinded]

1 Load packages

Show the code
library(renv)
library(tidyverse)
library(broom)
library(labelled)
library(psych)
library(GPArotation)
#library(devtools)
#install_github("cran/multicon") # not on CRAN atm
library(multicon)
library(correlation)
library(careless)
library(corrplot)
library(lavaan)
library(semTools)
library(semPlot)
library(knitr)
library(ggdist)
library(ggforce)
library(cowplot)
library(nortest)
library(lmerTest)
library(wordcloud) # these 3 for the word clouds
library(RColorBrewer)
library(tm)

2 Data cleaning

Show the code
source("clean_data_st1.R")

3 Create item parcels

3.1 Well-being measures

Reshape data

Show the code
df_sbsa_wide_wb <- df_sbsa %>% 
  arrange(pid, time) %>% 
  select(pid, time, rando, starts_with(c("sw06", "ml01", "rs01", "sc01"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = starts_with(c("sw06", "ml01", "rs01", "sc01")))
# colnames(df_sbsa_wide_wb)

3.1.1 Meaning in life

Check CFA item loadings at T1

cfa_meaning <- '
# Define the latent factors
meaning1 =~ NA*ml01_01_t1 + lambda1*ml01_01_t1 + lambda2*ml01_02_t1 + lambda3*ml01_03_t1 + lambda4*ml01_04_t1 + lambda5*ml01_05_t1 + lambda6*ml01_06_t1 + lambda7*ml01_07_t1 + lambda8*ml01_08_t1 + lambda9*ml01_09_t1 + lambda10*ml01_10_t1

# Intercepts
ml01_01_t1 ~ i1*1
ml01_02_t1 ~ 1
ml01_03_t1 ~ 1
ml01_04_t1 ~ 1
ml01_05_t1 ~ 1
ml01_06_t1 ~ 1
ml01_07_t1 ~ 1
ml01_08_t1 ~ 1
ml01_09_t1 ~ 1
ml01_10_t1 ~ 1

# Unique Variances
ml01_01_t1 ~~ ml01_01_t1
ml01_02_t1 ~~ ml01_02_t1
ml01_03_t1 ~~ ml01_03_t1
ml01_04_t1 ~~ ml01_04_t1
ml01_05_t1 ~~ ml01_05_t1
ml01_06_t1 ~~ ml01_06_t1
ml01_07_t1 ~~ ml01_07_t1
ml01_08_t1 ~~ ml01_08_t1
ml01_09_t1 ~~ ml01_09_t1
ml01_10_t1 ~~ ml01_10_t1

# Latent Variable Means
meaning1 ~ 0*1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
'
fit_cfa_meaning <- cfa(cfa_meaning, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_meaning, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 36 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           697         715
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                              2033.788
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4515.632
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.553
  Tucker-Lewis Index (TLI)                       0.425
                                                      
  Robust Comparative Fit Index (CFI)             0.553
  Robust Tucker-Lewis Index (TLI)                0.425

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12063.842
  Loglikelihood unrestricted model (H1)     -11046.948
                                                      
  Akaike (AIC)                               24187.684
  Bayesian (BIC)                             24324.088
  Sample-size adjusted Bayesian (SABIC)      24228.832

Root Mean Square Error of Approximation:

  RMSEA                                          0.286
  90 Percent confidence interval - lower         0.276
  90 Percent confidence interval - upper         0.297
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.286
  90 Percent confidence interval - lower         0.276
  90 Percent confidence interval - upper         0.297
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.229

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  meaning1 =~                                         
    m01_01_ (lmb1)    1.355    0.053   25.543    0.000
    m01_02_ (lmb2)   -0.392    0.057   -6.855    0.000
    m01_03_ (lmb3)   -0.224    0.062   -3.631    0.000
    m01_04_ (lmb4)    1.513    0.052   28.862    0.000
    m01_05_ (lmb5)    1.340    0.053   25.155    0.000
    m01_06_ (lmb6)    1.440    0.054   26.620    0.000
    m01_07_ (lmb7)   -0.199    0.059   -3.396    0.001
    m01_08_ (lmb8)   -0.346    0.063   -5.490    0.000
    m01_09_ (lmb9)   -1.440    0.062  -23.048    0.000
    m01_10_ (lm10)   -0.720    0.062  -11.555    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_1 (i1)    4.175    0.063   66.262    0.000
   .ml01_02_1         5.365    0.055   97.095    0.000
   .ml01_03_1         5.033    0.059   85.888    0.000
   .ml01_04_1         3.857    0.065   59.286    0.000
   .ml01_05_1         4.387    0.063   69.727    0.000
   .ml01_06_1         3.891    0.065   59.699    0.000
   .ml01_07_1         5.026    0.056   90.101    0.000
   .ml01_08_1         4.984    0.060   82.648    0.000
   .ml01_09_1         3.898    0.072   54.299    0.000
   .ml01_10_1         4.927    0.062   79.130    0.000
    meaning1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_t1        0.931    0.061   15.370    0.000
   .ml01_02_t1        1.972    0.107   18.491    0.000
   .ml01_03_t1        2.343    0.126   18.620    0.000
   .ml01_04_t1        0.660    0.052   12.713    0.000
   .ml01_05_t1        0.964    0.062   15.528    0.000
   .ml01_06_t1        0.888    0.060   14.738    0.000
   .ml01_07_t1        2.129    0.114   18.628    0.000
   .ml01_08_t1        2.415    0.130   18.554    0.000
   .ml01_09_t1        1.518    0.093   16.374    0.000
   .ml01_10_t1        2.184    0.120   18.155    0.000
    meaning1          1.000                           
tidy(fit_cfa_meaning) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 10 × 6
   term                   op    label    estimate std.error std.all
   <chr>                  <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 meaning1 =~ ml01_04_t1 =~    lambda4     1.51     0.0524   0.881
 2 meaning1 =~ ml01_09_t1 =~    lambda9    -1.44     0.0625  -0.760
 3 meaning1 =~ ml01_06_t1 =~    lambda6     1.44     0.0541   0.837
 4 meaning1 =~ ml01_01_t1 =~    lambda1     1.35     0.0530   0.815
 5 meaning1 =~ ml01_05_t1 =~    lambda5     1.34     0.0533   0.807
 6 meaning1 =~ ml01_10_t1 =~    lambda10   -0.720    0.0623  -0.438
 7 meaning1 =~ ml01_02_t1 =~    lambda2    -0.392    0.0571  -0.269
 8 meaning1 =~ ml01_08_t1 =~    lambda8    -0.346    0.0631  -0.218
 9 meaning1 =~ ml01_03_t1 =~    lambda3    -0.224    0.0617  -0.145
10 meaning1 =~ ml01_07_t1 =~    lambda7    -0.199    0.0587  -0.135

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_wb <- df_sbsa_wide_wb %>% 
  mutate(ml01_09_t1_r = ml01_09_t1,
         ml01_10_t1_r = ml01_10_t1,
         ml01_02_t1_r = ml01_02_t1,
         ml01_08_t1_r = ml01_08_t1,
         ml01_07_t1_r = ml01_07_t1,
         ml01_03_t1_r = ml01_03_t1,
         ml01_09_t2_r = ml01_09_t2,
         ml01_10_t2_r = ml01_10_t2,
         ml01_02_t2_r = ml01_02_t2,
         ml01_08_t2_r = ml01_08_t2,
         ml01_07_t2_r = ml01_07_t2,
         ml01_03_t2_r = ml01_03_t2) %>% 
  mutate(across(intersect(starts_with("ml01"), ends_with("_r")), 
                ~ recode(.x, `1` = 7L, `2` = 6L, `3` = 5L, `4` = 4L, `5` = 3L, `6` = 2L, `7` = 1L, .default = NA_integer_))) %>% 
  mutate(meaning_par1_t1 = rowMeans(across(c(ml01_04_t1, ml01_10_t1_r, ml01_03_t1_r, ml01_07_t1_r)), na.rm=T),
         meaning_par2_t1 = rowMeans(across(c(ml01_09_t1_r, ml01_05_t1, ml01_08_t1_r)), na.rm=T),
         meaning_par3_t1 = rowMeans(across(c(ml01_06_t1, ml01_01_t1, ml01_02_t1_r)), na.rm=T),
         meaning_par1_t2 = rowMeans(across(c(ml01_04_t2, ml01_10_t2_r, ml01_03_t2_r, ml01_07_t2_r)), na.rm=T),
         meaning_par2_t2 = rowMeans(across(c(ml01_09_t2_r, ml01_05_t2, ml01_08_t2_r)), na.rm=T),
         meaning_par3_t2 = rowMeans(across(c(ml01_06_t2, ml01_01_t2, ml01_02_t2_r)), na.rm=T))

3.1.2 Self-esteem

Check CFA item loadings at T1

cfa_selfes <- '
# Define the latent factors
selfes1 =~ NA*rs01_01_t1 + lambda1*rs01_01_t1 + lambda2*rs01_02_t1 + lambda3*rs01_03_t1 + lambda4*rs01_04_t1 + lambda5*rs01_05_t1 + lambda6*rs01_06_t1 + lambda7*rs01_07_t1 + lambda8*rs01_08_t1 + lambda9*rs01_09_t1 + lambda10*rs01_10_t1

# Intercepts
rs01_01_t1 ~ i1*1
rs01_02_t1 ~ 1
rs01_03_t1 ~ 1
rs01_04_t1 ~ 1
rs01_05_t1 ~ 1
rs01_06_t1 ~ 1
rs01_07_t1 ~ 1
rs01_08_t1 ~ 1
rs01_09_t1 ~ 1
rs01_10_t1 ~ 1

# Unique Variances
rs01_01_t1 ~~ rs01_01_t1
rs01_02_t1 ~~ rs01_02_t1
rs01_03_t1 ~~ rs01_03_t1
rs01_04_t1 ~~ rs01_04_t1
rs01_05_t1 ~~ rs01_05_t1
rs01_06_t1 ~~ rs01_06_t1
rs01_07_t1 ~~ rs01_07_t1
rs01_08_t1 ~~ rs01_08_t1
rs01_09_t1 ~~ rs01_09_t1
rs01_10_t1 ~~ rs01_10_t1

# Latent Variable Means
selfes1 ~ 0*1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
'
fit_cfa_selfes <- cfa(cfa_selfes, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_selfes, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 14 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           697         715
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               503.552
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3492.047
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.864
  Tucker-Lewis Index (TLI)                       0.825
                                                      
  Robust Comparative Fit Index (CFI)             0.864
  Robust Tucker-Lewis Index (TLI)                0.825

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -9587.382
  Loglikelihood unrestricted model (H1)      -9335.606
                                                      
  Akaike (AIC)                               19234.764
  Bayesian (BIC)                             19371.168
  Sample-size adjusted Bayesian (SABIC)      19275.912

Root Mean Square Error of Approximation:

  RMSEA                                          0.139
  90 Percent confidence interval - lower         0.128
  90 Percent confidence interval - upper         0.149
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.139
  90 Percent confidence interval - lower         0.128
  90 Percent confidence interval - upper         0.149
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.066

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  selfes1 =~                                          
    r01_01_ (lmb1)    0.881    0.041   21.562    0.000
    r01_02_ (lmb2)   -0.941    0.046  -20.624    0.000
    r01_03_ (lmb3)    0.516    0.033   15.679    0.000
    r01_04_ (lmb4)    0.619    0.036   17.043    0.000
    r01_05_ (lmb5)   -0.875    0.045  -19.595    0.000
    r01_06_ (lmb6)   -1.033    0.045  -23.146    0.000
    r01_07_ (lmb7)    0.674    0.038   17.791    0.000
    r01_08_ (lmb8)   -0.554    0.046  -12.021    0.000
    r01_09_ (lmb9)   -1.086    0.043  -25.135    0.000
    r01_10_ (lm10)    0.995    0.039   25.685    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_1 (i1)    2.947    0.046   64.218    0.000
   .rs01_02_1         3.340    0.050   66.153    0.000
   .rs01_03_1         3.947    0.034  115.122    0.000
   .rs01_04_1         3.789    0.038   98.424    0.000
   .rs01_05_1         2.898    0.049   59.213    0.000
   .rs01_06_1         3.323    0.051   65.133    0.000
   .rs01_07_1         3.627    0.040   89.658    0.000
   .rs01_08_1         3.854    0.047   82.849    0.000
   .rs01_09_1         2.692    0.051   52.878    0.000
   .rs01_10_1         3.209    0.046   69.858    0.000
    selfes1           0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_t1        0.692    0.042   16.574    0.000
   .rs01_02_t1        0.890    0.054   16.595    0.000
   .rs01_03_t1        0.553    0.031   17.626    0.000
   .rs01_04_t1        0.649    0.037   17.455    0.000
   .rs01_05_t1        0.904    0.053   17.076    0.000
   .rs01_06_t1        0.746    0.048   15.672    0.000
   .rs01_07_t1        0.687    0.040   17.291    0.000
   .rs01_08_t1        1.201    0.066   18.189    0.000
   .rs01_09_t1        0.626    0.041   15.162    0.000
   .rs01_10_t1        0.481    0.033   14.759    0.000
    selfes1           1.000                           
tidy(fit_cfa_selfes) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 10 × 6
   term                  op    label    estimate std.error std.all
   <chr>                 <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 selfes1 =~ rs01_09_t1 =~    lambda9    -1.09     0.0432  -0.808
 2 selfes1 =~ rs01_06_t1 =~    lambda6    -1.03     0.0446  -0.767
 3 selfes1 =~ rs01_10_t1 =~    lambda10    0.995    0.0387   0.820
 4 selfes1 =~ rs01_02_t1 =~    lambda2    -0.941    0.0456  -0.706
 5 selfes1 =~ rs01_01_t1 =~    lambda1     0.881    0.0408   0.727
 6 selfes1 =~ rs01_05_t1 =~    lambda5    -0.875    0.0447  -0.677
 7 selfes1 =~ rs01_07_t1 =~    lambda7     0.674    0.0379   0.631
 8 selfes1 =~ rs01_04_t1 =~    lambda4     0.619    0.0363   0.609
 9 selfes1 =~ rs01_08_t1 =~    lambda8    -0.554    0.0461  -0.451
10 selfes1 =~ rs01_03_t1 =~    lambda3     0.516    0.0329   0.570

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_wb <- df_sbsa_wide_wb %>% 
  mutate(rs01_09_t1_r = rs01_09_t1,
         rs01_06_t1_r = rs01_06_t1,
         rs01_02_t1_r = rs01_02_t1,
         rs01_05_t1_r = rs01_05_t1,
         rs01_08_t1_r = rs01_08_t1,
         rs01_09_t2_r = rs01_09_t2,
         rs01_06_t2_r = rs01_06_t2,
         rs01_02_t2_r = rs01_02_t2,
         rs01_05_t2_r = rs01_05_t2,
         rs01_08_t2_r = rs01_08_t2) %>% 
  mutate(across(intersect(starts_with("rs01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(selfes_par1_t1 = rowMeans(across(c(rs01_09_t1_r, rs01_05_t1_r, rs01_08_t1_r, rs01_03_t1)), na.rm=T),
         selfes_par2_t1 = rowMeans(across(c(rs01_06_t1_r, rs01_01_t1, rs01_04_t1)), na.rm=T),
         selfes_par3_t1 = rowMeans(across(c(rs01_10_t1, rs01_02_t1_r, rs01_07_t1)), na.rm=T),
         selfes_par1_t2 = rowMeans(across(c(rs01_09_t2_r, rs01_05_t2_r, rs01_08_t2_r, rs01_03_t2)), na.rm=T),
         selfes_par2_t2 = rowMeans(across(c(rs01_06_t2_r, rs01_01_t2, rs01_04_t2)), na.rm=T),
         selfes_par3_t2 = rowMeans(across(c(rs01_10_t2, rs01_02_t2_r, rs01_07_t2)), na.rm=T))

3.1.3 Self-concept clarity

Check CFA item loadings at T1

cfa_concept <- '
# Define the latent factors
concept1 =~ NA*sc01_01_t1 + lambda1*sc01_01_t1 + lambda2*sc01_02_t1 + lambda3*sc01_03_t1 + lambda4*sc01_04_t1 + lambda5*sc01_05_t1 + lambda6*sc01_06_t1 + lambda7*sc01_07_t1 + lambda8*sc01_08_t1 + lambda9*sc01_09_t1 + lambda10*sc01_10_t1 + lambda11*sc01_11_t1 + lambda12*sc01_12_t1

# Intercepts
sc01_01_t1 ~ i1*1
sc01_02_t1 ~ 1
sc01_03_t1 ~ 1
sc01_04_t1 ~ 1
sc01_05_t1 ~ 1
sc01_06_t1 ~ 1
sc01_07_t1 ~ 1
sc01_08_t1 ~ 1
sc01_09_t1 ~ 1
sc01_10_t1 ~ 1
sc01_11_t1 ~ 1
sc01_12_t1 ~ 1

# Unique Variances
sc01_01_t1 ~~ sc01_01_t1
sc01_02_t1 ~~ sc01_02_t1
sc01_03_t1 ~~ sc01_03_t1
sc01_04_t1 ~~ sc01_04_t1
sc01_05_t1 ~~ sc01_05_t1
sc01_06_t1 ~~ sc01_06_t1
sc01_07_t1 ~~ sc01_07_t1
sc01_08_t1 ~~ sc01_08_t1
sc01_09_t1 ~~ sc01_09_t1
sc01_10_t1 ~~ sc01_10_t1
sc01_11_t1 ~~ sc01_11_t1
sc01_12_t1 ~~ sc01_12_t1

# Latent Variable Means
concept1 ~ 0*1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
'
fit_cfa_concept <- cfa(cfa_concept, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_concept, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 37 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           697         715
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               399.384
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3266.666
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.892
  Tucker-Lewis Index (TLI)                       0.868
                                                      
  Robust Comparative Fit Index (CFI)             0.892
  Robust Tucker-Lewis Index (TLI)                0.868

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12476.420
  Loglikelihood unrestricted model (H1)     -12276.727
                                                      
  Akaike (AIC)                               25024.839
  Bayesian (BIC)                             25188.523
  Sample-size adjusted Bayesian (SABIC)      25074.217

Root Mean Square Error of Approximation:

  RMSEA                                          0.096
  90 Percent confidence interval - lower         0.087
  90 Percent confidence interval - upper         0.105
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.998
                                                      
  Robust RMSEA                                   0.096
  90 Percent confidence interval - lower         0.087
  90 Percent confidence interval - upper         0.105
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.999

Standardized Root Mean Square Residual:

  SRMR                                           0.048

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  concept1 =~                                         
    s01_01_ (lmb1)    0.817    0.043   18.924    0.000
    s01_02_ (lmb2)    0.949    0.045   21.141    0.000
    s01_03_ (lmb3)    0.751    0.046   16.392    0.000
    s01_04_ (lmb4)    0.851    0.045   18.729    0.000
    s01_05_ (lmb5)    0.751    0.048   15.623    0.000
    s01_06_ (lmb6)    0.052    0.047    1.104    0.270
    s01_07_ (lmb7)    0.741    0.049   15.064    0.000
    s01_08_ (lmb8)    0.996    0.042   23.772    0.000
    s01_09_ (lmb9)    1.038    0.044   23.459    0.000
    s01_10_ (lm10)    0.850    0.047   18.256    0.000
    s01_11_ (lm11)   -0.687    0.042  -16.443    0.000
    s01_12_ (lm12)    0.828    0.046   17.918    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_1 (i1)    3.232    0.047   69.254    0.000
   .sc01_02_1         3.485    0.050   69.942    0.000
   .sc01_03_1         3.354    0.048   69.815    0.000
   .sc01_04_1         3.301    0.049   67.480    0.000
   .sc01_05_1         2.981    0.050   59.621    0.000
   .sc01_06_1         2.927    0.045   65.525    0.000
   .sc01_07_1         2.780    0.051   54.610    0.000
   .sc01_08_1         2.772    0.048   57.506    0.000
   .sc01_09_1         2.852    0.051   56.279    0.000
   .sc01_10_1         2.941    0.050   59.017    0.000
   .sc01_11_1         3.224    0.044   73.560    0.000
   .sc01_12_1         3.116    0.049   63.125    0.000
    concept1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_t1        0.851    0.050   16.949    0.000
   .sc01_02_t1        0.831    0.051   16.250    0.000
   .sc01_03_t1        1.045    0.060   17.490    0.000
   .sc01_04_t1        0.945    0.056   16.952    0.000
   .sc01_05_t1        1.179    0.067   17.620    0.000
   .sc01_06_t1        1.388    0.074   18.664    0.000
   .sc01_07_t1        1.258    0.071   17.756    0.000
   .sc01_08_t1        0.627    0.041   15.179    0.000
   .sc01_09_t1        0.713    0.046   15.377    0.000
   .sc01_10_t1        1.009    0.059   17.051    0.000
   .sc01_11_t1        0.867    0.050   17.481    0.000
   .sc01_12_t1        1.012    0.059   17.197    0.000
    concept1          1.000                           
tidy(fit_cfa_concept) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                   op    label    estimate std.error std.all
   <chr>                  <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 concept1 =~ sc01_09_t1 =~    lambda9    1.04      0.0442  0.776 
 2 concept1 =~ sc01_08_t1 =~    lambda8    0.996     0.0419  0.783 
 3 concept1 =~ sc01_02_t1 =~    lambda2    0.949     0.0449  0.721 
 4 concept1 =~ sc01_04_t1 =~    lambda4    0.851     0.0454  0.659 
 5 concept1 =~ sc01_10_t1 =~    lambda10   0.850     0.0465  0.646 
 6 concept1 =~ sc01_12_t1 =~    lambda12   0.828     0.0462  0.635 
 7 concept1 =~ sc01_01_t1 =~    lambda1    0.817     0.0432  0.663 
 8 concept1 =~ sc01_05_t1 =~    lambda5    0.751     0.0481  0.569 
 9 concept1 =~ sc01_03_t1 =~    lambda3    0.751     0.0458  0.592 
10 concept1 =~ sc01_07_t1 =~    lambda7    0.741     0.0492  0.551 
11 concept1 =~ sc01_11_t1 =~    lambda11  -0.687     0.0418 -0.593 
12 concept1 =~ sc01_06_t1 =~    lambda6    0.0520    0.0471  0.0441

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_wb <- df_sbsa_wide_wb %>% # based on the item content, it makes more sense here to recode all except sc01_11
  mutate(sc01_01_t1_r = sc01_01_t1,
         sc01_02_t1_r = sc01_02_t1,
         sc01_03_t1_r = sc01_03_t1,
         sc01_04_t1_r = sc01_04_t1,
         sc01_05_t1_r = sc01_05_t1,
         sc01_06_t1_r = sc01_06_t1,
         sc01_07_t1_r = sc01_07_t1,
         sc01_08_t1_r = sc01_08_t1,
         sc01_09_t1_r = sc01_09_t1,
         sc01_10_t1_r = sc01_10_t1,
         sc01_12_t1_r = sc01_12_t1,
         sc01_01_t2_r = sc01_01_t2,
         sc01_02_t2_r = sc01_02_t2,
         sc01_03_t2_r = sc01_03_t2,
         sc01_04_t2_r = sc01_04_t2,
         sc01_05_t2_r = sc01_05_t2,
         sc01_06_t2_r = sc01_06_t2,
         sc01_07_t2_r = sc01_07_t2,
         sc01_08_t2_r = sc01_08_t2,
         sc01_09_t2_r = sc01_09_t2,
         sc01_10_t2_r = sc01_10_t2,
         sc01_12_t2_r = sc01_12_t2) %>% 
  mutate(across(intersect(starts_with("sc01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(concept_par1_t1 = rowMeans(across(c(sc01_09_t1_r, sc01_12_t1_r, sc01_03_t1_r, sc01_06_t1_r)), na.rm=T),
         concept_par2_t1 = rowMeans(across(c(sc01_08_t1_r, sc01_10_t1_r, sc01_05_t1_r, sc01_11_t1)), na.rm=T),
         concept_par3_t1 = rowMeans(across(c(sc01_02_t1_r, sc01_04_t1_r, sc01_01_t1_r, sc01_07_t1_r)), na.rm=T),
         concept_par1_t2 = rowMeans(across(c(sc01_09_t2_r, sc01_12_t2_r, sc01_03_t2_r, sc01_06_t2_r)), na.rm=T),
         concept_par2_t2 = rowMeans(across(c(sc01_08_t2_r, sc01_10_t2_r, sc01_05_t2_r, sc01_11_t2)), na.rm=T),
         concept_par3_t2 = rowMeans(across(c(sc01_02_t2_r, sc01_04_t2_r, sc01_01_t2_r, sc01_07_t2_r)), na.rm=T))

# replace NaN with regular NA
df_sbsa_wide_wb <- df_sbsa_wide_wb %>% 
  mutate_all(~ifelse(is.nan(.), NA, .))

3.2 Big Five

Show the code
df_sbsa_wide_pers <- df_sbsa %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("bf05", "bf06"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = starts_with(c("bf05", "bf06")))
# colnames(df_sbsa_wide_pers)

3.2.1 Extraversion - current self

Check CFA item loadings at T1

cfa_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*bf05_01_t1 + lambda1*bf05_01_t1 + lambda2*bf05_06_t1 + lambda3*bf05_11_t1 + lambda4*bf05_16_t1 + lambda5*bf05_21_t1 + lambda6*bf05_26_t1 + lambda7*bf05_31_t1 + lambda8*bf05_36_t1 + lambda9*bf05_41_t1 + lambda10*bf05_46_t1 + lambda11*bf05_51_t1 + lambda12*bf05_56_t1

# Intercepts
bf05_01_t1 ~ i1*1
bf05_06_t1 ~ 1
bf05_11_t1 ~ 1
bf05_16_t1 ~ 1
bf05_21_t1 ~ 1
bf05_26_t1 ~ 1
bf05_31_t1 ~ 1
bf05_36_t1 ~ 1
bf05_41_t1 ~ 1
bf05_46_t1 ~ 1
bf05_51_t1 ~ 1
bf05_56_t1 ~ 1

# Unique Variances
bf05_01_t1 ~~ bf05_01_t1
bf05_06_t1 ~~ bf05_06_t1
bf05_11_t1 ~~ bf05_11_t1
bf05_16_t1 ~~ bf05_16_t1
bf05_21_t1 ~~ bf05_21_t1
bf05_26_t1 ~~ bf05_26_t1
bf05_31_t1 ~~ bf05_31_t1
bf05_36_t1 ~~ bf05_36_t1
bf05_41_t1 ~~ bf05_41_t1
bf05_46_t1 ~~ bf05_46_t1
bf05_51_t1 ~~ bf05_51_t1
bf05_56_t1 ~~ bf05_56_t1

# Latent Variable Means
extra_curr1 ~ 0*1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
'
fit_cfa_extra_curr <- cfa(cfa_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_extra_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 33 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               684.334
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2531.434
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.744
  Tucker-Lewis Index (TLI)                       0.688
                                                      
  Robust Comparative Fit Index (CFI)             0.744
  Robust Tucker-Lewis Index (TLI)                0.688

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12568.224
  Loglikelihood unrestricted model (H1)     -12226.057
                                                      
  Akaike (AIC)                               25208.448
  Bayesian (BIC)                             25372.492
  Sample-size adjusted Bayesian (SABIC)      25258.184

Root Mean Square Error of Approximation:

  RMSEA                                          0.129
  90 Percent confidence interval - lower         0.120
  90 Percent confidence interval - upper         0.137
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.129
  90 Percent confidence interval - lower         0.120
  90 Percent confidence interval - upper         0.137
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.075

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_curr1 =~                                      
    b05_01_ (lmb1)    0.905    0.045   19.964    0.000
    b05_06_ (lmb2)    0.558    0.043   12.961    0.000
    b05_11_ (lmb3)   -0.288    0.047   -6.054    0.000
    b05_16_ (lmb4)   -0.681    0.044  -15.352    0.000
    b05_21_ (lmb5)    0.745    0.048   15.388    0.000
    b05_26_ (lmb6)   -0.574    0.051  -11.172    0.000
    b05_31_ (lmb7)   -0.695    0.040  -17.580    0.000
    b05_36_ (lmb8)   -0.525    0.044  -12.035    0.000
    b05_41_ (lmb9)    0.746    0.044   17.053    0.000
    b05_46_ (lm10)    0.855    0.048   17.778    0.000
    b05_51_ (lm11)   -0.569    0.047  -12.063    0.000
    b05_56_ (lm12)    0.621    0.041   15.025    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_1 (i1)    2.722    0.048   56.269    0.000
   .bf05_06_1         3.058    0.042   72.063    0.000
   .bf05_11_1         2.707    0.044   61.144    0.000
   .bf05_16_1         3.828    0.044   87.153    0.000
   .bf05_21_1         2.733    0.049   56.110    0.000
   .bf05_26_1         3.129    0.049   63.404    0.000
   .bf05_31_1         4.034    0.041   99.348    0.000
   .bf05_36_1         3.161    0.043   74.131    0.000
   .bf05_41_1         2.852    0.045   63.934    0.000
   .bf05_46_1         2.956    0.050   59.442    0.000
   .bf05_51_1         3.178    0.046   69.273    0.000
   .bf05_56_1         3.224    0.041   78.112    0.000
    extr_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_t1        0.828    0.054   15.325    0.000
   .bf05_06_t1        0.956    0.054   17.635    0.000
   .bf05_11_t1        1.298    0.070   18.537    0.000
   .bf05_16_t1        0.895    0.054   16.468    0.000
   .bf05_21_t1        1.115    0.066   16.906    0.000
   .bf05_26_t1        1.385    0.078   17.831    0.000
   .bf05_31_t1        0.678    0.042   15.964    0.000
   .bf05_36_t1        1.004    0.056   17.813    0.000
   .bf05_41_t1        0.843    0.052   16.106    0.000
   .bf05_46_t1        1.009    0.063   16.048    0.000
   .bf05_51_t1        1.157    0.065   17.724    0.000
   .bf05_56_t1        0.814    0.048   16.935    0.000
    extra_curr1       1.000                           
tidy(fit_cfa_extra_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 extra_curr1 =~ bf05_01_t1 =~    lambda1     0.905    0.0453   0.705
 2 extra_curr1 =~ bf05_46_t1 =~    lambda10    0.855    0.0481   0.648
 3 extra_curr1 =~ bf05_41_t1 =~    lambda9     0.746    0.0438   0.631
 4 extra_curr1 =~ bf05_21_t1 =~    lambda5     0.745    0.0484   0.577
 5 extra_curr1 =~ bf05_31_t1 =~    lambda7    -0.695    0.0395  -0.645
 6 extra_curr1 =~ bf05_16_t1 =~    lambda4    -0.681    0.0443  -0.584
 7 extra_curr1 =~ bf05_56_t1 =~    lambda12    0.621    0.0413   0.567
 8 extra_curr1 =~ bf05_26_t1 =~    lambda6    -0.574    0.0514  -0.439
 9 extra_curr1 =~ bf05_51_t1 =~    lambda11   -0.569    0.0472  -0.468
10 extra_curr1 =~ bf05_06_t1 =~    lambda2     0.558    0.0431   0.496
11 extra_curr1 =~ bf05_36_t1 =~    lambda8    -0.525    0.0436  -0.464
12 extra_curr1 =~ bf05_11_t1 =~    lambda3    -0.288    0.0475  -0.245

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_31_t1_r = bf05_31_t1,
         bf05_16_t1_r = bf05_16_t1,
         bf05_26_t1_r = bf05_26_t1,
         bf05_51_t1_r = bf05_51_t1,
         bf05_36_t1_r = bf05_36_t1,
         bf05_11_t1_r = bf05_11_t1,
         bf05_31_t2_r = bf05_31_t2,
         bf05_16_t2_r = bf05_16_t2,
         bf05_26_t2_r = bf05_26_t2,
         bf05_51_t2_r = bf05_51_t2,
         bf05_36_t2_r = bf05_36_t2,
         bf05_11_t2_r = bf05_11_t2) %>% 
  mutate(across(c(bf05_31_t1_r, bf05_16_t1_r, bf05_26_t1_r, bf05_51_t1_r, bf05_36_t1_r, bf05_11_t1_r, 
                  bf05_31_t2_r, bf05_16_t2_r, bf05_26_t2_r, bf05_51_t2_r, bf05_36_t2_r, bf05_11_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_curr_par1_t1 = rowMeans(across(c(bf05_01_t1, bf05_16_t1_r, bf05_51_t1_r, bf05_11_t1_r)), na.rm=T),
         extra_curr_par2_t1 = rowMeans(across(c(bf05_46_t1, bf05_31_t1_r, bf05_26_t1_r, bf05_36_t1_r)), na.rm=T),
         extra_curr_par3_t1 = rowMeans(across(c(bf05_41_t1, bf05_21_t1, bf05_56_t1, bf05_06_t1)), na.rm=T),
         extra_curr_par1_t2 = rowMeans(across(c(bf05_01_t2, bf05_16_t2_r, bf05_51_t2_r, bf05_11_t2_r)), na.rm=T),
         extra_curr_par2_t2 = rowMeans(across(c(bf05_46_t2, bf05_31_t2_r, bf05_26_t2_r, bf05_36_t2_r)), na.rm=T),
         extra_curr_par3_t2 = rowMeans(across(c(bf05_41_t2, bf05_21_t2, bf05_56_t2, bf05_06_t2)), na.rm=T))

3.2.2 Extraversion - ideal self

Check CFA item loadings at T1

cfa_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*bf06_01_t1 + lambda1*bf06_01_t1 + lambda2*bf06_06_t1 + lambda3*bf06_11_t1 + lambda4*bf06_16_t1 + lambda5*bf06_21_t1 + lambda6*bf06_26_t1 + lambda7*bf06_31_t1 + lambda8*bf06_36_t1 + lambda9*bf06_41_t1 + lambda10*bf06_46_t1 + lambda11*bf06_51_t1 + lambda12*bf06_56_t1

# Intercepts
bf06_01_t1 ~ i1*1
bf06_06_t1 ~ 1
bf06_11_t1 ~ 1
bf06_16_t1 ~ 1
bf06_21_t1 ~ 1
bf06_26_t1 ~ 1
bf06_31_t1 ~ 1
bf06_36_t1 ~ 1
bf06_41_t1 ~ 1
bf06_46_t1 ~ 1
bf06_51_t1 ~ 1
bf06_56_t1 ~ 1

# Unique Variances
bf06_01_t1 ~~ bf06_01_t1
bf06_06_t1 ~~ bf06_06_t1
bf06_11_t1 ~~ bf06_11_t1
bf06_16_t1 ~~ bf06_16_t1
bf06_21_t1 ~~ bf06_21_t1
bf06_26_t1 ~~ bf06_26_t1
bf06_31_t1 ~~ bf06_31_t1
bf06_36_t1 ~~ bf06_36_t1
bf06_41_t1 ~~ bf06_41_t1
bf06_46_t1 ~~ bf06_46_t1
bf06_51_t1 ~~ bf06_51_t1
bf06_56_t1 ~~ bf06_56_t1

# Latent Variable Means
extra_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
'
fit_cfa_extra_ideal <- cfa(cfa_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_extra_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 18 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               352.210
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1114.995
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.716
  Tucker-Lewis Index (TLI)                       0.653
                                                      
  Robust Comparative Fit Index (CFI)             0.716
  Robust Tucker-Lewis Index (TLI)                0.653

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11623.649
  Loglikelihood unrestricted model (H1)     -11447.544
                                                      
  Akaike (AIC)                               23319.298
  Bayesian (BIC)                             23483.342
  Sample-size adjusted Bayesian (SABIC)      23369.034

Root Mean Square Error of Approximation:

  RMSEA                                          0.089
  90 Percent confidence interval - lower         0.080
  90 Percent confidence interval - upper         0.097
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.948
                                                      
  Robust RMSEA                                   0.089
  90 Percent confidence interval - lower         0.080
  90 Percent confidence interval - upper         0.097
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.948

Standardized Root Mean Square Residual:

  SRMR                                           0.063

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_ideal1 =~                                     
    b06_01_ (lmb1)    0.357    0.035   10.233    0.000
    b06_06_ (lmb2)    0.347    0.041    8.503    0.000
    b06_11_ (lmb3)   -0.273    0.061   -4.453    0.000
    b06_16_ (lmb4)   -0.432    0.053   -8.134    0.000
    b06_21_ (lmb5)    0.513    0.045   11.284    0.000
    b06_26_ (lmb6)   -0.464    0.042  -11.163    0.000
    b06_31_ (lmb7)   -0.500    0.045  -10.998    0.000
    b06_36_ (lmb8)   -0.482    0.046  -10.548    0.000
    b06_41_ (lmb9)    0.378    0.031   12.035    0.000
    b06_46_ (lm10)    0.306    0.047    6.526    0.000
    b06_51_ (lm11)   -0.456    0.045  -10.107    0.000
    b06_56_ (lm12)    0.390    0.035   11.269    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_1 (i1)    4.249    0.031  138.630    0.000
   .bf06_06_1         4.099    0.036  114.344    0.000
   .bf06_11_1         2.405    0.052   46.050    0.000
   .bf06_16_1         2.848    0.045   63.380    0.000
   .bf06_21_1         3.798    0.040   94.342    0.000
   .bf06_26_1         1.727    0.037   47.061    0.000
   .bf06_31_1         2.136    0.040   53.820    0.000
   .bf06_36_1         2.190    0.041   53.964    0.000
   .bf06_41_1         4.429    0.028  157.795    0.000
   .bf06_46_1         3.760    0.040   94.031    0.000
   .bf06_51_1         2.392    0.040   59.998    0.000
   .bf06_56_1         4.234    0.031  138.044    0.000
    extra_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_t1        0.534    0.032   16.891    0.000
   .bf06_06_t1        0.785    0.044   17.666    0.000
   .bf06_11_t1        1.845    0.100   18.455    0.000
   .bf06_16_t1        1.235    0.071   17.413    0.000
   .bf06_21_t1        0.878    0.053   16.445    0.000
   .bf06_26_t1        0.733    0.045   16.432    0.000
   .bf06_31_t1        0.860    0.053   16.348    0.000
   .bf06_36_t1        0.927    0.055   16.915    0.000
   .bf06_41_t1        0.412    0.026   16.138    0.000
   .bf06_46_t1        1.032    0.057   18.028    0.000
   .bf06_51_t1        0.911    0.053   17.053    0.000
   .bf06_56_t1        0.510    0.031   16.434    0.000
    extra_ideal1      1.000                           
tidy(fit_cfa_extra_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 extra_ideal1 =~ bf06_21_t1 =~    lambda5     0.513    0.0454   0.480
 2 extra_ideal1 =~ bf06_31_t1 =~    lambda7    -0.500    0.0454  -0.474
 3 extra_ideal1 =~ bf06_36_t1 =~    lambda8    -0.482    0.0457  -0.448
 4 extra_ideal1 =~ bf06_26_t1 =~    lambda6    -0.464    0.0416  -0.477
 5 extra_ideal1 =~ bf06_51_t1 =~    lambda11   -0.456    0.0451  -0.431
 6 extra_ideal1 =~ bf06_16_t1 =~    lambda4    -0.432    0.0531  -0.362
 7 extra_ideal1 =~ bf06_56_t1 =~    lambda12    0.390    0.0346   0.480
 8 extra_ideal1 =~ bf06_41_t1 =~    lambda9     0.378    0.0314   0.507
 9 extra_ideal1 =~ bf06_01_t1 =~    lambda1     0.357    0.0349   0.439
10 extra_ideal1 =~ bf06_06_t1 =~    lambda2     0.347    0.0408   0.365
11 extra_ideal1 =~ bf06_46_t1 =~    lambda10    0.306    0.0469   0.289
12 extra_ideal1 =~ bf06_11_t1 =~    lambda3    -0.273    0.0613  -0.197

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_31_t1_r = bf06_31_t1,
         bf06_16_t1_r = bf06_16_t1,
         bf06_26_t1_r = bf06_26_t1,
         bf06_51_t1_r = bf06_51_t1,
         bf06_36_t1_r = bf06_36_t1,
         bf06_11_t1_r = bf06_11_t1,
         bf06_31_t2_r = bf06_31_t2,
         bf06_16_t2_r = bf06_16_t2,
         bf06_26_t2_r = bf06_26_t2,
         bf06_51_t2_r = bf06_51_t2,
         bf06_36_t2_r = bf06_36_t2,
         bf06_11_t2_r = bf06_11_t2) %>% 
  mutate(across(c(bf06_31_t1_r, bf06_16_t1_r, bf06_26_t1_r, bf06_51_t1_r, bf06_36_t1_r, bf06_11_t1_r, 
                  bf06_31_t2_r, bf06_16_t2_r, bf06_26_t2_r, bf06_51_t2_r, bf06_36_t2_r, bf06_11_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_ideal_par1_t1 = rowMeans(across(c(bf06_21_t1, bf06_16_t1_r, bf06_01_t1, bf06_11_t1_r)), na.rm=T),
         extra_ideal_par2_t1 = rowMeans(across(c(bf06_31_t1_r, bf06_51_t1_r, bf06_41_t1, bf06_46_t1)), na.rm=T),
         extra_ideal_par3_t1 = rowMeans(across(c(bf06_36_t1_r, bf06_26_t1_r, bf06_56_t1, bf06_06_t1)), na.rm=T),
         extra_ideal_par1_t2 = rowMeans(across(c(bf06_21_t2, bf06_16_t2_r, bf06_01_t2, bf06_11_t2_r)), na.rm=T),
         extra_ideal_par2_t2 = rowMeans(across(c(bf06_31_t2_r, bf06_51_t2_r, bf06_41_t2, bf06_46_t2)), na.rm=T),
         extra_ideal_par3_t2 = rowMeans(across(c(bf06_36_t2_r, bf06_26_t2_r, bf06_56_t2, bf06_06_t2)), na.rm=T))

3.2.3 Agreeableness - current self

Check CFA item loadings at T1

cfa_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*bf05_02_t1 + lambda1*bf05_02_t1 + lambda2*bf05_07_t1 + lambda3*bf05_12_t1 + lambda4*bf05_17_t1 + lambda5*bf05_22_t1 + lambda6*bf05_27_t1 + lambda7*bf05_32_t1 + lambda8*bf05_37_t1 + lambda9*bf05_42_t1 + lambda10*bf05_47_t1 + lambda11*bf05_52_t1 + lambda12*bf05_57_t1

# Intercepts
bf05_02_t1 ~ i1*1
bf05_07_t1 ~ 1
bf05_12_t1 ~ 1
bf05_17_t1 ~ 1
bf05_22_t1 ~ 1
bf05_27_t1 ~ 1
bf05_32_t1 ~ 1
bf05_37_t1 ~ 1
bf05_42_t1 ~ 1
bf05_47_t1 ~ 1
bf05_52_t1 ~ 1
bf05_57_t1 ~ 1

# Unique Variances
bf05_02_t1 ~~ bf05_02_t1
bf05_07_t1 ~~ bf05_07_t1
bf05_12_t1 ~~ bf05_12_t1
bf05_17_t1 ~~ bf05_17_t1
bf05_22_t1 ~~ bf05_22_t1
bf05_27_t1 ~~ bf05_27_t1
bf05_32_t1 ~~ bf05_32_t1
bf05_37_t1 ~~ bf05_37_t1
bf05_42_t1 ~~ bf05_42_t1
bf05_47_t1 ~~ bf05_47_t1
bf05_52_t1 ~~ bf05_52_t1
bf05_57_t1 ~~ bf05_57_t1

# Latent Variable Means
agree_curr1 ~ 0*1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
'
fit_cfa_agree_curr <- cfa(cfa_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_agree_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 42 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               397.070
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1779.776
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.800
  Tucker-Lewis Index (TLI)                       0.755
                                                      
  Robust Comparative Fit Index (CFI)             0.800
  Robust Tucker-Lewis Index (TLI)                0.755

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12059.241
  Loglikelihood unrestricted model (H1)     -11860.706
                                                      
  Akaike (AIC)                               24190.482
  Bayesian (BIC)                             24354.526
  Sample-size adjusted Bayesian (SABIC)      24240.218

Root Mean Square Error of Approximation:

  RMSEA                                          0.095
  90 Percent confidence interval - lower         0.086
  90 Percent confidence interval - upper         0.104
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.998
                                                      
  Robust RMSEA                                   0.095
  90 Percent confidence interval - lower         0.086
  90 Percent confidence interval - upper         0.104
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.998

Standardized Root Mean Square Residual:

  SRMR                                           0.062

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_curr1 =~                                      
    b05_02_ (lmb1)    0.556    0.036   15.654    0.000
    b05_07_ (lmb2)    0.462    0.029   15.657    0.000
    b05_12_ (lmb3)   -0.575    0.049  -11.847    0.000
    b05_17_ (lmb4)   -0.253    0.059   -4.265    0.000
    b05_22_ (lmb5)   -0.635    0.049  -12.979    0.000
    b05_27_ (lmb6)    0.593    0.046   12.857    0.000
    b05_32_ (lmb7)    0.467    0.035   13.511    0.000
    b05_37_ (lmb8)   -0.733    0.048  -15.243    0.000
    b05_42_ (lmb9)   -0.312    0.048   -6.548    0.000
    b05_47_ (lm10)   -0.736    0.049  -14.932    0.000
    b05_52_ (lm11)    0.478    0.031   15.343    0.000
    b05_57_ (lm12)    0.580    0.048   12.197    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_1 (i1)    4.132    0.035  117.713    0.000
   .bf05_07_1         4.412    0.029  150.971    0.000
   .bf05_12_1         2.935    0.046   63.427    0.000
   .bf05_17_1         2.845    0.054   52.892    0.000
   .bf05_22_1         2.302    0.047   49.028    0.000
   .bf05_27_1         3.647    0.044   82.286    0.000
   .bf05_32_1         3.951    0.034  117.879    0.000
   .bf05_37_1         2.592    0.047   54.777    0.000
   .bf05_42_1         3.604    0.043   83.442    0.000
   .bf05_47_1         2.500    0.049   51.498    0.000
   .bf05_52_1         4.222    0.031  137.343    0.000
   .bf05_57_1         3.112    0.045   68.733    0.000
    agre_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_t1        0.559    0.035   16.173    0.000
   .bf05_07_t1        0.387    0.024   16.224    0.000
   .bf05_12_t1        1.176    0.067   17.474    0.000
   .bf05_17_t1        1.973    0.106   18.620    0.000
   .bf05_22_t1        1.147    0.067   17.071    0.000
   .bf05_27_t1        1.030    0.060   17.182    0.000
   .bf05_32_t1        0.572    0.034   17.041    0.000
   .bf05_37_t1        1.039    0.064   16.324    0.000
   .bf05_42_t1        1.216    0.066   18.366    0.000
   .bf05_47_t1        1.118    0.067   16.592    0.000
   .bf05_52_t1        0.436    0.027   16.320    0.000
   .bf05_57_t1        1.107    0.064   17.324    0.000
    agree_curr1       1.000                           
tidy(fit_cfa_agree_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 agree_curr1 =~ bf05_47_t1 =~    lambda10   -0.736    0.0493  -0.571
 2 agree_curr1 =~ bf05_37_t1 =~    lambda8    -0.733    0.0481  -0.584
 3 agree_curr1 =~ bf05_22_t1 =~    lambda5    -0.635    0.0489  -0.510
 4 agree_curr1 =~ bf05_27_t1 =~    lambda6     0.593    0.0461   0.504
 5 agree_curr1 =~ bf05_57_t1 =~    lambda12    0.580    0.0475   0.483
 6 agree_curr1 =~ bf05_12_t1 =~    lambda3    -0.575    0.0486  -0.469
 7 agree_curr1 =~ bf05_02_t1 =~    lambda1     0.556    0.0355   0.597
 8 agree_curr1 =~ bf05_52_t1 =~    lambda11    0.478    0.0312   0.586
 9 agree_curr1 =~ bf05_32_t1 =~    lambda7     0.467    0.0346   0.525
10 agree_curr1 =~ bf05_07_t1 =~    lambda2     0.462    0.0295   0.596
11 agree_curr1 =~ bf05_42_t1 =~    lambda9    -0.312    0.0476  -0.272
12 agree_curr1 =~ bf05_17_t1 =~    lambda4    -0.253    0.0592  -0.177

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_47_t1_r = bf05_47_t1,
         bf05_37_t1_r = bf05_37_t1,
         bf05_22_t1_r = bf05_22_t1,
         bf05_12_t1_r = bf05_12_t1,
         bf05_42_t1_r = bf05_42_t1,
         bf05_17_t1_r = bf05_17_t1,
         bf05_47_t2_r = bf05_47_t2,
         bf05_37_t2_r = bf05_37_t2,
         bf05_22_t2_r = bf05_22_t2,
         bf05_12_t2_r = bf05_12_t2,
         bf05_42_t2_r = bf05_42_t2,
         bf05_17_t2_r = bf05_17_t2) %>% 
  mutate(across(c(bf05_47_t1_r, bf05_37_t1_r, bf05_22_t1_r, bf05_12_t1_r, bf05_42_t1_r, bf05_17_t1_r, 
                  bf05_47_t2_r, bf05_37_t2_r, bf05_22_t2_r, bf05_12_t2_r, bf05_42_t2_r, bf05_17_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_curr_par1_t1 = rowMeans(across(c(bf05_47_t1_r, bf05_12_t1_r, bf05_32_t1, bf05_17_t1)), na.rm=T),
         agree_curr_par2_t1 = rowMeans(across(c(bf05_37_t1_r, bf05_57_t1, bf05_52_t1, bf05_42_t1)), na.rm=T),
         agree_curr_par3_t1 = rowMeans(across(c(bf05_22_t1_r, bf05_27_t1, bf05_02_t1, bf05_07_t1)), na.rm=T),
         agree_curr_par1_t2 = rowMeans(across(c(bf05_47_t2_r, bf05_12_t2_r, bf05_32_t2, bf05_17_t2)), na.rm=T),
         agree_curr_par2_t2 = rowMeans(across(c(bf05_37_t2_r, bf05_57_t2, bf05_52_t2, bf05_42_t2)), na.rm=T),
         agree_curr_par3_t2 = rowMeans(across(c(bf05_22_t2_r, bf05_27_t2, bf05_02_t2, bf05_07_t2)), na.rm=T))

3.2.4 Agreeableness - ideal self

Check CFA item loadings at T1

cfa_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*bf06_02_t1 + lambda1*bf06_02_t1 + lambda2*bf06_07_t1 + lambda3*bf06_12_t1 + lambda4*bf06_17_t1 + lambda5*bf06_22_t1 + lambda6*bf06_27_t1 + lambda7*bf06_32_t1 + lambda8*bf06_37_t1 + lambda9*bf06_42_t1 + lambda10*bf06_47_t1 + lambda11*bf06_52_t1 + lambda12*bf06_57_t1

# Intercepts
bf06_02_t1 ~ i1*1
bf06_07_t1 ~ 1
bf06_12_t1 ~ 1
bf06_17_t1 ~ 1
bf06_22_t1 ~ 1
bf06_27_t1 ~ 1
bf06_32_t1 ~ 1
bf06_37_t1 ~ 1
bf06_42_t1 ~ 1
bf06_47_t1 ~ 1
bf06_52_t1 ~ 1
bf06_57_t1 ~ 1

# Unique Variances
bf06_02_t1 ~~ bf06_02_t1
bf06_07_t1 ~~ bf06_07_t1
bf06_12_t1 ~~ bf06_12_t1
bf06_17_t1 ~~ bf06_17_t1
bf06_22_t1 ~~ bf06_22_t1
bf06_27_t1 ~~ bf06_27_t1
bf06_32_t1 ~~ bf06_32_t1
bf06_37_t1 ~~ bf06_37_t1
bf06_42_t1 ~~ bf06_42_t1
bf06_47_t1 ~~ bf06_47_t1
bf06_52_t1 ~~ bf06_52_t1
bf06_57_t1 ~~ bf06_57_t1

# Latent Variable Means
agree_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
'
fit_cfa_agree_ideal <- cfa(cfa_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_agree_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 38 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               207.020
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1676.172
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.905
  Tucker-Lewis Index (TLI)                       0.884
                                                      
  Robust Comparative Fit Index (CFI)             0.905
  Robust Tucker-Lewis Index (TLI)                0.884

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11321.510
  Loglikelihood unrestricted model (H1)     -11218.000
                                                      
  Akaike (AIC)                               22715.020
  Bayesian (BIC)                             22879.064
  Sample-size adjusted Bayesian (SABIC)      22764.757

Root Mean Square Error of Approximation:

  RMSEA                                          0.063
  90 Percent confidence interval - lower         0.054
  90 Percent confidence interval - upper         0.073
  P-value H_0: RMSEA <= 0.050                    0.008
  P-value H_0: RMSEA >= 0.080                    0.001
                                                      
  Robust RMSEA                                   0.063
  90 Percent confidence interval - lower         0.054
  90 Percent confidence interval - upper         0.073
  P-value H_0: Robust RMSEA <= 0.050             0.008
  P-value H_0: Robust RMSEA >= 0.080             0.001

Standardized Root Mean Square Residual:

  SRMR                                           0.043

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_ideal1 =~                                     
    b06_02_ (lmb1)    0.547    0.036   15.247    0.000
    b06_07_ (lmb2)    0.376    0.027   13.838    0.000
    b06_12_ (lmb3)   -0.418    0.039  -10.640    0.000
    b06_17_ (lmb4)   -0.155    0.064   -2.426    0.015
    b06_22_ (lmb5)   -0.404    0.044   -9.184    0.000
    b06_27_ (lmb6)    0.637    0.039   16.366    0.000
    b06_32_ (lmb7)    0.516    0.037   13.786    0.000
    b06_37_ (lmb8)   -0.532    0.035  -15.064    0.000
    b06_42_ (lmb9)   -0.417    0.047   -8.803    0.000
    b06_47_ (lm10)   -0.710    0.042  -17.026    0.000
    b06_52_ (lm11)    0.477    0.029   16.461    0.000
    b06_57_ (lm12)    0.601    0.039   15.498    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_1 (i1)    4.222    0.036  118.086    0.000
   .bf06_07_1         4.616    0.027  173.609    0.000
   .bf06_12_1         1.952    0.037   52.218    0.000
   .bf06_17_1         2.818    0.058   48.481    0.000
   .bf06_22_1         1.906    0.041   46.199    0.000
   .bf06_27_1         3.966    0.039  101.100    0.000
   .bf06_32_1         4.256    0.037  115.812    0.000
   .bf06_37_1         1.703    0.035   48.588    0.000
   .bf06_42_1         2.766    0.044   62.568    0.000
   .bf06_47_1         1.891    0.042   44.701    0.000
   .bf06_52_1         4.472    0.029  152.983    0.000
   .bf06_57_1         3.709    0.039   95.898    0.000
    agree_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_t1        0.601    0.036   16.725    0.000
   .bf06_07_t1        0.356    0.021   17.075    0.000
   .bf06_12_t1        0.809    0.045   17.873    0.000
   .bf06_17_t1        2.355    0.126   18.720    0.000
   .bf06_22_t1        1.036    0.057   18.105    0.000
   .bf06_27_t1        0.677    0.042   16.251    0.000
   .bf06_32_t1        0.683    0.040   17.155    0.000
   .bf06_37_t1        0.582    0.035   16.735    0.000
   .bf06_42_t1        1.202    0.066   18.140    0.000
   .bf06_47_t1        0.756    0.047   15.972    0.000
   .bf06_52_t1        0.374    0.023   16.214    0.000
   .bf06_57_t1        0.692    0.042   16.577    0.000
    agree_ideal1      1.000                           
tidy(fit_cfa_agree_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 agree_ideal1 =~ bf06_47_t1 =~    lambda10   -0.710    0.0417  -0.632
 2 agree_ideal1 =~ bf06_27_t1 =~    lambda6     0.637    0.0389   0.612
 3 agree_ideal1 =~ bf06_57_t1 =~    lambda12    0.601    0.0388   0.586
 4 agree_ideal1 =~ bf06_02_t1 =~    lambda1     0.547    0.0359   0.577
 5 agree_ideal1 =~ bf06_37_t1 =~    lambda8    -0.532    0.0353  -0.572
 6 agree_ideal1 =~ bf06_32_t1 =~    lambda7     0.516    0.0374   0.530
 7 agree_ideal1 =~ bf06_52_t1 =~    lambda11    0.477    0.0290   0.615
 8 agree_ideal1 =~ bf06_12_t1 =~    lambda3    -0.418    0.0393  -0.422
 9 agree_ideal1 =~ bf06_42_t1 =~    lambda9    -0.417    0.0474  -0.355
10 agree_ideal1 =~ bf06_22_t1 =~    lambda5    -0.404    0.0440  -0.369
11 agree_ideal1 =~ bf06_07_t1 =~    lambda2     0.376    0.0272   0.533
12 agree_ideal1 =~ bf06_17_t1 =~    lambda4    -0.155    0.0639  -0.101

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_47_t1_r = bf06_47_t1,
         bf06_37_t1_r = bf06_37_t1,
         bf06_22_t1_r = bf06_22_t1,
         bf06_12_t1_r = bf06_12_t1,
         bf06_42_t1_r = bf06_42_t1,
         bf06_17_t1_r = bf06_17_t1,
         bf06_47_t2_r = bf06_47_t2,
         bf06_37_t2_r = bf06_37_t2,
         bf06_22_t2_r = bf06_22_t2,
         bf06_12_t2_r = bf06_12_t2,
         bf06_42_t2_r = bf06_42_t2,
         bf06_17_t2_r = bf06_17_t2) %>% 
  mutate(across(c(bf06_47_t1_r, bf06_37_t1_r, bf06_22_t1_r, bf06_12_t1_r, bf06_42_t1_r, bf06_17_t1_r, 
                  bf06_47_t2_r, bf06_37_t2_r, bf06_22_t2_r, bf06_12_t2_r, bf06_42_t2_r, bf06_17_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_ideal_par1_t1 = rowMeans(across(c(bf06_47_t1_r, bf06_32_t1, bf06_42_t1_r, bf06_17_t1_r)), na.rm=T),
         agree_ideal_par2_t1 = rowMeans(across(c(bf06_27_t1, bf06_37_t1_r, bf06_12_t1_r, bf06_07_t1)), na.rm=T),
         agree_ideal_par3_t1 = rowMeans(across(c(bf06_57_t1, bf06_02_t1, bf06_52_t1, bf06_22_t1_r)), na.rm=T),
         agree_ideal_par1_t2 = rowMeans(across(c(bf06_47_t2_r, bf06_32_t2, bf06_42_t2_r, bf06_17_t2_r)), na.rm=T),
         agree_ideal_par2_t2 = rowMeans(across(c(bf06_27_t2, bf06_37_t2_r, bf06_12_t2_r, bf06_07_t2)), na.rm=T),
         agree_ideal_par3_t2 = rowMeans(across(c(bf06_57_t2, bf06_02_t2, bf06_52_t2, bf06_22_t2_r)), na.rm=T))

3.2.5 Conscientiousness - current self

Check CFA item loadings at T1

cfa_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*bf05_03_t1 + lambda1*bf05_03_t1 + lambda2*bf05_08_t1 + lambda3*bf05_13_t1 + lambda4*bf05_18_t1 + lambda5*bf05_23_t1 + lambda6*bf05_28_t1 + lambda7*bf05_33_t1 + lambda8*bf05_38_t1 + lambda9*bf05_43_t1 + lambda10*bf05_48_t1 + lambda11*bf05_53_t1 + lambda12*bf05_58_t1
# Intercepts
bf05_03_t1 ~ i1*1
bf05_08_t1 ~ 1
bf05_13_t1 ~ 1
bf05_18_t1 ~ 1
bf05_23_t1 ~ 1
bf05_28_t1 ~ 1
bf05_33_t1 ~ 1
bf05_38_t1 ~ 1
bf05_43_t1 ~ 1
bf05_48_t1 ~ 1
bf05_53_t1 ~ 1
bf05_58_t1 ~ 1

# Unique Variances
bf05_03_t1 ~~ bf05_03_t1
bf05_08_t1 ~~ bf05_08_t1
bf05_13_t1 ~~ bf05_13_t1
bf05_18_t1 ~~ bf05_18_t1
bf05_23_t1 ~~ bf05_23_t1
bf05_28_t1 ~~ bf05_28_t1
bf05_33_t1 ~~ bf05_33_t1
bf05_38_t1 ~~ bf05_38_t1
bf05_43_t1 ~~ bf05_43_t1
bf05_48_t1 ~~ bf05_48_t1
bf05_53_t1 ~~ bf05_53_t1
bf05_58_t1 ~~ bf05_58_t1

# Latent Variable Means
consc_curr1 ~ 0*1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
'
fit_cfa_consc_curr <- cfa(cfa_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_consc_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 39 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               514.063
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3020.731
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.844
  Tucker-Lewis Index (TLI)                       0.810
                                                      
  Robust Comparative Fit Index (CFI)             0.844
  Robust Tucker-Lewis Index (TLI)                0.810

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12199.493
  Loglikelihood unrestricted model (H1)     -11942.461
                                                      
  Akaike (AIC)                               24470.986
  Bayesian (BIC)                             24635.030
  Sample-size adjusted Bayesian (SABIC)      24520.722

Root Mean Square Error of Approximation:

  RMSEA                                          0.110
  90 Percent confidence interval - lower         0.101
  90 Percent confidence interval - upper         0.119
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.110
  90 Percent confidence interval - lower         0.101
  90 Percent confidence interval - upper         0.119
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.061

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_curr1 =~                                      
    b05_03_ (lmb1)    1.070    0.049   22.011    0.000
    b05_08_ (lmb2)    0.781    0.046   17.094    0.000
    b05_13_ (lmb3)   -0.443    0.041  -10.767    0.000
    b05_18_ (lmb4)   -0.855    0.042  -20.576    0.000
    b05_23_ (lmb5)    0.789    0.048   16.467    0.000
    b05_28_ (lmb6)    0.704    0.046   15.168    0.000
    b05_33_ (lmb7)   -0.872    0.042  -20.697    0.000
    b05_38_ (lmb8)   -0.654    0.036  -17.983    0.000
    b05_43_ (lmb9)   -0.463    0.035  -13.219    0.000
    b05_48_ (lm10)    0.766    0.044   17.481    0.000
    b05_53_ (lm11)   -0.672    0.041  -16.473    0.000
    b05_58_ (lm12)    0.622    0.048   12.969    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_1 (i1)    2.901    0.054   53.495    0.000
   .bf05_08_1         3.455    0.048   72.076    0.000
   .bf05_13_1         3.597    0.040   88.997    0.000
   .bf05_18_1         3.548    0.045   78.125    0.000
   .bf05_23_1         3.310    0.050   66.531    0.000
   .bf05_28_1         2.847    0.048   59.789    0.000
   .bf05_33_1         3.354    0.046   72.830    0.000
   .bf05_38_1         3.594    0.038   93.523    0.000
   .bf05_43_1         3.956    0.035  112.611    0.000
   .bf05_48_1         2.158    0.046   46.799    0.000
   .bf05_53_1         3.673    0.042   86.641    0.000
   .bf05_58_1         2.794    0.048   58.076    0.000
    cnsc_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_t1        0.923    0.059   15.538    0.000
   .bf05_08_t1        1.007    0.059   17.200    0.000
   .bf05_13_t1        0.954    0.052   18.226    0.000
   .bf05_18_t1        0.721    0.045   16.063    0.000
   .bf05_23_t1        1.120    0.065   17.261    0.000
   .bf05_28_t1        1.100    0.063   17.582    0.000
   .bf05_33_t1        0.732    0.046   15.905    0.000
   .bf05_38_t1        0.612    0.036   16.837    0.000
   .bf05_43_t1        0.655    0.037   17.876    0.000
   .bf05_48_t1        0.909    0.053   17.033    0.000
   .bf05_53_t1        0.813    0.047   17.252    0.000
   .bf05_58_t1        1.243    0.069   17.965    0.000
    consc_curr1       1.000                           
tidy(fit_cfa_consc_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 consc_curr1 =~ bf05_03_t1 =~    lambda1     1.07     0.0486   0.744
 2 consc_curr1 =~ bf05_33_t1 =~    lambda7    -0.872    0.0421  -0.714
 3 consc_curr1 =~ bf05_18_t1 =~    lambda4    -0.855    0.0416  -0.710
 4 consc_curr1 =~ bf05_23_t1 =~    lambda5     0.789    0.0479   0.597
 5 consc_curr1 =~ bf05_08_t1 =~    lambda2     0.781    0.0457   0.614
 6 consc_curr1 =~ bf05_48_t1 =~    lambda10    0.766    0.0438   0.626
 7 consc_curr1 =~ bf05_28_t1 =~    lambda6     0.704    0.0464   0.557
 8 consc_curr1 =~ bf05_53_t1 =~    lambda11   -0.672    0.0408  -0.598
 9 consc_curr1 =~ bf05_38_t1 =~    lambda8    -0.654    0.0364  -0.642
10 consc_curr1 =~ bf05_58_t1 =~    lambda12    0.622    0.0479   0.487
11 consc_curr1 =~ bf05_43_t1 =~    lambda9    -0.463    0.0350  -0.497
12 consc_curr1 =~ bf05_13_t1 =~    lambda3    -0.443    0.0411  -0.413

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_03_t1_r = bf05_03_t1,
         bf05_23_t1_r = bf05_23_t1,
         bf05_48_t1_r = bf05_48_t1,
         bf05_08_t1_r = bf05_08_t1,
         bf05_28_t1_r = bf05_28_t1,
         bf05_58_t1_r = bf05_58_t1,
         bf05_03_t2_r = bf05_03_t2,
         bf05_23_t2_r = bf05_23_t2,
         bf05_48_t2_r = bf05_48_t2,
         bf05_08_t2_r = bf05_08_t2,
         bf05_28_t2_r = bf05_28_t2,
         bf05_58_t2_r = bf05_58_t2) %>% 
  mutate(across(c(bf05_03_t1_r, bf05_23_t1_r, bf05_48_t1_r, bf05_08_t1_r, bf05_28_t1_r, bf05_58_t1_r,
                  bf05_03_t2_r, bf05_23_t2_r, bf05_48_t2_r, bf05_08_t2_r, bf05_28_t2_r, bf05_58_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_curr_par1_t1 = rowMeans(across(c(bf05_03_t1_r, bf05_48_t1_r, bf05_38_t1, bf05_13_t1)), na.rm=T),
         consc_curr_par2_t1 = rowMeans(across(c(bf05_33_t1, bf05_08_t1_r, bf05_53_t1, bf05_43_t1)), na.rm=T),
         consc_curr_par3_t1 = rowMeans(across(c(bf05_18_t1, bf05_23_t1_r, bf05_28_t1_r, bf05_58_t1_r)), na.rm=T),
         consc_curr_par1_t2 = rowMeans(across(c(bf05_03_t2_r, bf05_48_t2_r, bf05_38_t2, bf05_13_t2)), na.rm=T),
         consc_curr_par2_t2 = rowMeans(across(c(bf05_33_t2, bf05_08_t2_r, bf05_53_t2, bf05_43_t2)), na.rm=T),
         consc_curr_par3_t2 = rowMeans(across(c(bf05_18_t2, bf05_23_t2_r, bf05_28_t2_r, bf05_58_t2_r)), na.rm=T))

3.2.6 Conscientiousness - ideal self

Check CFA item loadings at T1

cfa_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*bf06_03_t1 + lambda1*bf06_03_t1 + lambda2*bf06_08_t1 + lambda3*bf06_13_t1 + lambda4*bf06_18_t1 + lambda5*bf06_23_t1 + lambda6*bf06_28_t1 + lambda7*bf06_33_t1 + lambda8*bf06_38_t1 + lambda9*bf06_43_t1 + lambda10*bf06_48_t1 + lambda11*bf06_53_t1 + lambda12*bf06_58_t1
# Intercepts
bf06_03_t1 ~ i1*1
bf06_08_t1 ~ 1
bf06_13_t1 ~ 1
bf06_18_t1 ~ 1
bf06_23_t1 ~ 1
bf06_28_t1 ~ 1
bf06_33_t1 ~ 1
bf06_38_t1 ~ 1
bf06_43_t1 ~ 1
bf06_48_t1 ~ 1
bf06_53_t1 ~ 1
bf06_58_t1 ~ 1

# Unique Variances
bf06_03_t1 ~~ bf06_03_t1
bf06_08_t1 ~~ bf06_08_t1
bf06_13_t1 ~~ bf06_13_t1
bf06_18_t1 ~~ bf06_18_t1
bf06_23_t1 ~~ bf06_23_t1
bf06_28_t1 ~~ bf06_28_t1
bf06_33_t1 ~~ bf06_33_t1
bf06_38_t1 ~~ bf06_38_t1
bf06_43_t1 ~~ bf06_43_t1
bf06_48_t1 ~~ bf06_48_t1
bf06_53_t1 ~~ bf06_53_t1
bf06_58_t1 ~~ bf06_58_t1

# Latent Variable Means
consc_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
'
fit_cfa_consc_ideal <- cfa(cfa_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_consc_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 21 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               228.997
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1639.961
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.889
  Tucker-Lewis Index (TLI)                       0.864
                                                      
  Robust Comparative Fit Index (CFI)             0.889
  Robust Tucker-Lewis Index (TLI)                0.864

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10137.985
  Loglikelihood unrestricted model (H1)     -10023.487
                                                      
  Akaike (AIC)                               20347.971
  Bayesian (BIC)                             20512.015
  Sample-size adjusted Bayesian (SABIC)      20397.707

Root Mean Square Error of Approximation:

  RMSEA                                          0.068
  90 Percent confidence interval - lower         0.059
  90 Percent confidence interval - upper         0.077
  P-value H_0: RMSEA <= 0.050                    0.001
  P-value H_0: RMSEA >= 0.080                    0.014
                                                      
  Robust RMSEA                                   0.068
  90 Percent confidence interval - lower         0.059
  90 Percent confidence interval - upper         0.077
  P-value H_0: Robust RMSEA <= 0.050             0.001
  P-value H_0: Robust RMSEA >= 0.080             0.014

Standardized Root Mean Square Residual:

  SRMR                                           0.046

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_ideal1 =~                                     
    b06_03_ (lmb1)    0.394    0.048    8.114    0.000
    b06_08_ (lmb2)    0.416    0.038   10.995    0.000
    b06_13_ (lmb3)   -0.385    0.042   -9.141    0.000
    b06_18_ (lmb4)   -0.383    0.032  -12.025    0.000
    b06_23_ (lmb5)    0.457    0.036   12.823    0.000
    b06_28_ (lmb6)    0.548    0.043   12.729    0.000
    b06_33_ (lmb7)   -0.470    0.030  -15.706    0.000
    b06_38_ (lmb8)   -0.415    0.028  -14.980    0.000
    b06_43_ (lmb9)   -0.397    0.026  -15.113    0.000
    b06_48_ (lm10)    0.438    0.029   14.955    0.000
    b06_53_ (lm11)   -0.452    0.027  -16.639    0.000
    b06_58_ (lm12)    0.456    0.037   12.430    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_1 (i1)    1.737    0.045   38.706    0.000
   .bf06_08_1         1.629    0.036   45.545    0.000
   .bf06_13_1         4.246    0.039  107.963    0.000
   .bf06_18_1         4.337    0.030  142.469    0.000
   .bf06_23_1         1.526    0.034   44.384    0.000
   .bf06_28_1         1.996    0.042   48.050    0.000
   .bf06_33_1         4.411    0.030  148.301    0.000
   .bf06_38_1         4.622    0.027  168.827    0.000
   .bf06_43_1         4.555    0.026  175.521    0.000
   .bf06_48_1         1.405    0.029   48.512    0.000
   .bf06_53_1         4.564    0.027  167.234    0.000
   .bf06_58_1         1.744    0.035   49.398    0.000
    consc_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_t1        1.263    0.069   18.213    0.000
   .bf06_08_t1        0.728    0.041   17.695    0.000
   .bf06_13_t1        0.941    0.052   18.074    0.000
   .bf06_18_t1        0.506    0.029   17.472    0.000
   .bf06_23_t1        0.623    0.036   17.289    0.000
   .bf06_28_t1        0.914    0.053   17.325    0.000
   .bf06_33_t1        0.402    0.025   16.327    0.000
   .bf06_38_t1        0.355    0.021   16.619    0.000
   .bf06_43_t1        0.317    0.019   16.556    0.000
   .bf06_48_t1        0.398    0.024   16.666    0.000
   .bf06_53_t1        0.320    0.020   15.912    0.000
   .bf06_58_t1        0.670    0.038   17.419    0.000
    consc_ideal1      1.000                           
tidy(fit_cfa_consc_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 consc_ideal1 =~ bf06_28_t1 =~    lambda6     0.548    0.0431   0.497
 2 consc_ideal1 =~ bf06_33_t1 =~    lambda7    -0.470    0.0299  -0.595
 3 consc_ideal1 =~ bf06_23_t1 =~    lambda5     0.457    0.0356   0.501
 4 consc_ideal1 =~ bf06_58_t1 =~    lambda12    0.456    0.0367   0.487
 5 consc_ideal1 =~ bf06_53_t1 =~    lambda11   -0.452    0.0272  -0.624
 6 consc_ideal1 =~ bf06_48_t1 =~    lambda10    0.438    0.0293   0.570
 7 consc_ideal1 =~ bf06_08_t1 =~    lambda2     0.416    0.0378   0.438
 8 consc_ideal1 =~ bf06_38_t1 =~    lambda8    -0.415    0.0277  -0.572
 9 consc_ideal1 =~ bf06_43_t1 =~    lambda9    -0.397    0.0263  -0.576
10 consc_ideal1 =~ bf06_03_t1 =~    lambda1     0.394    0.0485   0.330
11 consc_ideal1 =~ bf06_13_t1 =~    lambda3    -0.385    0.0421  -0.369
12 consc_ideal1 =~ bf06_18_t1 =~    lambda4    -0.383    0.0318  -0.474

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_03_t1_r = bf06_03_t1,
         bf06_23_t1_r = bf06_23_t1,
         bf06_48_t1_r = bf06_48_t1,
         bf06_08_t1_r = bf06_08_t1,
         bf06_28_t1_r = bf06_28_t1,
         bf06_58_t1_r = bf06_58_t1,
         bf06_03_t2_r = bf06_03_t2,
         bf06_23_t2_r = bf06_23_t2,
         bf06_48_t2_r = bf06_48_t2,
         bf06_08_t2_r = bf06_08_t2,
         bf06_28_t2_r = bf06_28_t2,
         bf06_58_t2_r = bf06_58_t2) %>% 
  mutate(across(c(bf06_03_t1_r, bf06_23_t1_r, bf06_48_t1_r, bf06_08_t1_r, bf06_28_t1_r, bf06_58_t1_r,
                  bf06_03_t2_r, bf06_23_t2_r, bf06_48_t2_r, bf06_08_t2_r, bf06_28_t2_r, bf06_58_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_ideal_par1_t1 = rowMeans(across(c(bf06_28_t1_r, bf06_48_t1_r, bf06_43_t1, bf06_18_t1)), na.rm=T),
         consc_ideal_par2_t1 = rowMeans(across(c(bf06_33_t1, bf06_53_t1, bf06_38_t1, bf06_13_t1)), na.rm=T),
         consc_ideal_par3_t1 = rowMeans(across(c(bf06_23_t1_r, bf06_58_t1_r, bf06_08_t1_r, bf06_03_t1_r)), na.rm=T),
         consc_ideal_par1_t2 = rowMeans(across(c(bf06_28_t2_r, bf06_48_t2_r, bf06_43_t2, bf06_18_t2)), na.rm=T),
         consc_ideal_par2_t2 = rowMeans(across(c(bf06_33_t2, bf06_53_t2, bf06_38_t2, bf06_13_t2)), na.rm=T),
         consc_ideal_par3_t2 = rowMeans(across(c(bf06_23_t2_r, bf06_58_t2_r, bf06_08_t2_r, bf06_03_t2_r)), na.rm=T))

3.2.7 Neuroticism - current self

Check CFA item loadings at T1

cfa_neuro_curr <- '
#| warning: false

# Define the latent factors
neuro_curr1 =~ NA*bf05_04_t1 + lambda1*bf05_04_t1 + lambda2*bf05_09_t1 + lambda3*bf05_14_t1 + lambda4*bf05_19_t1 + lambda5*bf05_24_t1 + lambda6*bf05_29_t1 + lambda7*bf05_34_t1 + lambda8*bf05_39_t1 + lambda9*bf05_44_t1 + lambda10*bf05_49_t1 + lambda11*bf05_54_t1 + lambda12*bf05_59_t1

# Intercepts
bf05_04_t1 ~ i1*1
bf05_09_t1 ~ 1
bf05_14_t1 ~ 1
bf05_19_t1 ~ 1
bf05_24_t1 ~ 1
bf05_29_t1 ~ 1
bf05_34_t1 ~ 1
bf05_39_t1 ~ 1
bf05_44_t1 ~ 1
bf05_49_t1 ~ 1
bf05_54_t1 ~ 1
bf05_59_t1 ~ 1

# Unique Variances
bf05_04_t1 ~~ bf05_04_t1
bf05_09_t1 ~~ bf05_09_t1
bf05_14_t1 ~~ bf05_14_t1
bf05_19_t1 ~~ bf05_19_t1
bf05_24_t1 ~~ bf05_24_t1
bf05_29_t1 ~~ bf05_29_t1
bf05_34_t1 ~~ bf05_34_t1
bf05_39_t1 ~~ bf05_39_t1
bf05_44_t1 ~~ bf05_44_t1
bf05_49_t1 ~~ bf05_49_t1
bf05_54_t1 ~~ bf05_54_t1
bf05_59_t1 ~~ bf05_59_t1

# Latent Variable Means
neuro_curr1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
'
fit_cfa_neuro_curr <- cfa(cfa_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan WARNING: some cases are empty and will be ignored:
  16 41 91 317 381 382 414 444 505 606 705
summary(fit_cfa_neuro_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 34 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               654.794
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3599.996
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.830
  Tucker-Lewis Index (TLI)                       0.792
                                                      
  Robust Comparative Fit Index (CFI)             0.830
  Robust Tucker-Lewis Index (TLI)                0.792

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12392.351
  Loglikelihood unrestricted model (H1)     -12064.954
                                                      
  Akaike (AIC)                               24856.701
  Bayesian (BIC)                             25020.745
  Sample-size adjusted Bayesian (SABIC)      24906.437

Root Mean Square Error of Approximation:

  RMSEA                                          0.126
  90 Percent confidence interval - lower         0.117
  90 Percent confidence interval - upper         0.134
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.126
  90 Percent confidence interval - lower         0.117
  90 Percent confidence interval - upper         0.134
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.060

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_curr1 =~                                      
    b05_04_ (lmb1)    0.889    0.044   20.156    0.000
    b05_09_ (lmb2)    0.720    0.045   15.945    0.000
    b05_14_ (lmb3)   -0.831    0.047  -17.825    0.000
    b05_19_ (lmb4)   -0.598    0.040  -14.906    0.000
    b05_24_ (lmb5)    0.803    0.045   17.928    0.000
    b05_29_ (lmb6)    0.903    0.042   21.305    0.000
    b05_34_ (lmb7)   -0.810    0.041  -19.588    0.000
    b05_39_ (lmb8)   -0.923    0.044  -20.954    0.000
    b05_44_ (lmb9)    0.776    0.043   18.009    0.000
    b05_49_ (lm10)    0.599    0.046   12.942    0.000
    b05_54_ (lm11)   -0.949    0.045  -21.283    0.000
    b05_59_ (lm12)   -0.759    0.048  -15.789    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_1 (i1)    2.754    0.048   57.017    0.000
   .bf05_09_1         2.926    0.047   62.162    0.000
   .bf05_14_1         3.257    0.050   65.636    0.000
   .bf05_19_1         3.639    0.041   87.961    0.000
   .bf05_24_1         2.942    0.048   61.537    0.000
   .bf05_29_1         2.908    0.047   61.917    0.000
   .bf05_34_1         3.861    0.045   85.935    0.000
   .bf05_39_1         3.383    0.048   70.033    0.000
   .bf05_44_1         3.161    0.046   69.232    0.000
   .bf05_49_1         2.366    0.047   50.510    0.000
   .bf05_54_1         3.331    0.049   67.698    0.000
   .bf05_59_1         3.151    0.050   63.190    0.000
    neur_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_t1        0.852    0.051   16.673    0.000
   .bf05_09_t1        1.041    0.059   17.648    0.000
   .bf05_14_t1        1.042    0.060   17.251    0.000
   .bf05_19_t1        0.848    0.048   17.841    0.000
   .bf05_24_t1        0.963    0.056   17.288    0.000
   .bf05_29_t1        0.737    0.046   16.091    0.000
   .bf05_34_t1        0.766    0.046   16.816    0.000
   .bf05_39_t1        0.791    0.050   15.897    0.000
   .bf05_44_t1        0.865    0.051   16.946    0.000
   .bf05_49_t1        1.184    0.065   18.086    0.000
   .bf05_54_t1        0.804    0.051   15.845    0.000
   .bf05_59_t1        1.174    0.067   17.579    0.000
    neuro_curr1       1.000                           
tidy(fit_cfa_neuro_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 neuro_curr1 =~ bf05_54_t1 =~    lambda11   -0.949    0.0446  -0.727
 2 neuro_curr1 =~ bf05_39_t1 =~    lambda8    -0.923    0.0440  -0.720
 3 neuro_curr1 =~ bf05_29_t1 =~    lambda6     0.903    0.0424   0.725
 4 neuro_curr1 =~ bf05_04_t1 =~    lambda1     0.889    0.0441   0.694
 5 neuro_curr1 =~ bf05_14_t1 =~    lambda3    -0.831    0.0466  -0.631
 6 neuro_curr1 =~ bf05_34_t1 =~    lambda7    -0.810    0.0413  -0.679
 7 neuro_curr1 =~ bf05_24_t1 =~    lambda5     0.803    0.0448   0.633
 8 neuro_curr1 =~ bf05_44_t1 =~    lambda9     0.776    0.0431   0.641
 9 neuro_curr1 =~ bf05_59_t1 =~    lambda12   -0.759    0.0481  -0.574
10 neuro_curr1 =~ bf05_09_t1 =~    lambda2     0.720    0.0451   0.577
11 neuro_curr1 =~ bf05_49_t1 =~    lambda10    0.599    0.0463   0.483
12 neuro_curr1 =~ bf05_19_t1 =~    lambda4    -0.598    0.0401  -0.545

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_29_t1_r = bf05_29_t1,
         bf05_04_t1_r = bf05_04_t1,
         bf05_24_t1_r = bf05_24_t1,
         bf05_44_t1_r = bf05_44_t1,
         bf05_09_t1_r = bf05_09_t1,
         bf05_49_t1_r = bf05_49_t1,
         bf05_29_t2_r = bf05_29_t2,
         bf05_04_t2_r = bf05_04_t2,
         bf05_24_t2_r = bf05_24_t2,
         bf05_44_t2_r = bf05_44_t2,
         bf05_09_t2_r = bf05_09_t2,
         bf05_49_t2_r = bf05_49_t2) %>% 
  mutate(across(c(bf05_29_t1_r, bf05_04_t1_r, bf05_24_t1_r, bf05_44_t1_r, bf05_09_t1_r, bf05_49_t1_r, 
                  bf05_29_t2_r, bf05_04_t2_r, bf05_24_t2_r, bf05_44_t2_r, bf05_09_t2_r, bf05_49_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_curr_par1_t1 = rowMeans(across(c(bf05_54_t1, bf05_34_t1, bf05_59_t1, bf05_19_t1)), na.rm=T),
         neuro_curr_par2_t1 = rowMeans(across(c(bf05_39_t1, bf05_14_t1, bf05_44_t1_r, bf05_49_t1_r)), na.rm=T),
         neuro_curr_par3_t1 = rowMeans(across(c(bf05_29_t1_r, bf05_04_t1_r, bf05_24_t1_r, bf05_09_t1_r)), na.rm=T),
         neuro_curr_par1_t2 = rowMeans(across(c(bf05_54_t2, bf05_34_t2, bf05_59_t2, bf05_19_t2)), na.rm=T),
         neuro_curr_par2_t2 = rowMeans(across(c(bf05_39_t2, bf05_14_t2, bf05_44_t2_r, bf05_49_t2_r)), na.rm=T),
         neuro_curr_par3_t2 = rowMeans(across(c(bf05_29_t2_r, bf05_04_t2_r, bf05_24_t2_r, bf05_09_t2_r)), na.rm=T))

3.2.8 Neuroticism - ideal self

Check CFA item loadings at T1

cfa_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*bf06_04_t1 + lambda1*bf06_04_t1 + lambda2*bf06_09_t1 + lambda3*bf06_14_t1 + lambda4*bf06_19_t1 + lambda5*bf06_24_t1 + lambda6*bf06_29_t1 + lambda7*bf06_34_t1 + lambda8*bf06_39_t1 + lambda9*bf06_44_t1 + lambda10*bf06_49_t1 + lambda11*bf06_54_t1 + lambda12*bf06_59_t1

# Intercepts
bf06_04_t1 ~ i1*1
bf06_09_t1 ~ 1
bf06_14_t1 ~ 1
bf06_19_t1 ~ 1
bf06_24_t1 ~ 1
bf06_29_t1 ~ 1
bf06_34_t1 ~ 1
bf06_39_t1 ~ 1
bf06_44_t1 ~ 1
bf06_49_t1 ~ 1
bf06_54_t1 ~ 1
bf06_59_t1 ~ 1

# Unique Variances
bf06_04_t1 ~~ bf06_04_t1
bf06_09_t1 ~~ bf06_09_t1
bf06_14_t1 ~~ bf06_14_t1
bf06_19_t1 ~~ bf06_19_t1
bf06_24_t1 ~~ bf06_24_t1
bf06_29_t1 ~~ bf06_29_t1
bf06_34_t1 ~~ bf06_34_t1
bf06_39_t1 ~~ bf06_39_t1
bf06_44_t1 ~~ bf06_44_t1
bf06_49_t1 ~~ bf06_49_t1
bf06_54_t1 ~~ bf06_54_t1
bf06_59_t1 ~~ bf06_59_t1

# Latent Variable Means
neuro_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
'
fit_cfa_neuro_ideal <- cfa(cfa_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_neuro_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 38 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               168.864
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1410.123
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.915
  Tucker-Lewis Index (TLI)                       0.896
                                                      
  Robust Comparative Fit Index (CFI)             0.915
  Robust Tucker-Lewis Index (TLI)                0.896

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10550.799
  Loglikelihood unrestricted model (H1)     -10466.367
                                                      
  Akaike (AIC)                               21173.599
  Bayesian (BIC)                             21337.643
  Sample-size adjusted Bayesian (SABIC)      21223.335

Root Mean Square Error of Approximation:

  RMSEA                                          0.055
  90 Percent confidence interval - lower         0.046
  90 Percent confidence interval - upper         0.064
  P-value H_0: RMSEA <= 0.050                    0.182
  P-value H_0: RMSEA >= 0.080                    0.000
                                                      
  Robust RMSEA                                   0.055
  90 Percent confidence interval - lower         0.046
  90 Percent confidence interval - upper         0.064
  P-value H_0: Robust RMSEA <= 0.050             0.182
  P-value H_0: Robust RMSEA >= 0.080             0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.042

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_ideal1 =~                                     
    b06_04_ (lmb1)    0.331    0.029   11.280    0.000
    b06_09_ (lmb2)    0.348    0.033   10.653    0.000
    b06_14_ (lmb3)   -0.477    0.036  -13.201    0.000
    b06_19_ (lmb4)   -0.491    0.040  -12.203    0.000
    b06_24_ (lmb5)    0.314    0.028   11.016    0.000
    b06_29_ (lmb6)    0.355    0.043    8.242    0.000
    b06_34_ (lmb7)   -0.540    0.037  -14.464    0.000
    b06_39_ (lmb8)   -0.557    0.032  -17.368    0.000
    b06_44_ (lmb9)    0.401    0.032   12.421    0.000
    b06_49_ (lm10)    0.340    0.062    5.478    0.000
    b06_54_ (lm11)   -0.517    0.030  -17.380    0.000
    b06_59_ (lm12)   -0.432    0.037  -11.566    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_1 (i1)    4.554    0.028  164.475    0.000
   .bf06_09_1         4.378    0.031  143.156    0.000
   .bf06_14_1         1.719    0.035   49.385    0.000
   .bf06_19_1         2.111    0.038   55.024    0.000
   .bf06_24_1         4.639    0.027  173.498    0.000
   .bf06_29_1         4.215    0.040  106.203    0.000
   .bf06_34_1         1.868    0.036   51.236    0.000
   .bf06_39_1         1.657    0.032   51.363    0.000
   .bf06_44_1         4.376    0.031  141.928    0.000
   .bf06_49_1         3.544    0.056   62.996    0.000
   .bf06_54_1         1.501    0.030   50.163    0.000
   .bf06_59_1         1.967    0.035   55.612    0.000
    neuro_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_t1        0.430    0.025   17.523    0.000
   .bf06_09_t1        0.537    0.030   17.658    0.000
   .bf06_14_t1        0.625    0.037   17.054    0.000
   .bf06_19_t1        0.795    0.046   17.321    0.000
   .bf06_24_t1        0.405    0.023   17.566    0.000
   .bf06_29_t1        0.981    0.054   18.131    0.000
   .bf06_34_t1        0.644    0.039   16.636    0.000
   .bf06_39_t1        0.421    0.028   15.220    0.000
   .bf06_44_t1        0.508    0.029   17.257    0.000
   .bf06_49_t1        2.113    0.114   18.505    0.000
   .bf06_54_t1        0.363    0.024   15.250    0.000
   .bf06_59_t1        0.694    0.040   17.483    0.000
    neuro_ideal1      1.000                           
tidy(fit_cfa_neuro_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 neuro_ideal1 =~ bf06_39_t1 =~    lambda8    -0.557    0.0321  -0.652
 2 neuro_ideal1 =~ bf06_34_t1 =~    lambda7    -0.540    0.0374  -0.559
 3 neuro_ideal1 =~ bf06_54_t1 =~    lambda11   -0.517    0.0298  -0.651
 4 neuro_ideal1 =~ bf06_19_t1 =~    lambda4    -0.491    0.0403  -0.483
 5 neuro_ideal1 =~ bf06_14_t1 =~    lambda3    -0.477    0.0361  -0.517
 6 neuro_ideal1 =~ bf06_59_t1 =~    lambda12   -0.432    0.0374  -0.460
 7 neuro_ideal1 =~ bf06_44_t1 =~    lambda9     0.401    0.0323   0.491
 8 neuro_ideal1 =~ bf06_29_t1 =~    lambda6     0.355    0.0431   0.338
 9 neuro_ideal1 =~ bf06_09_t1 =~    lambda2     0.348    0.0327   0.429
10 neuro_ideal1 =~ bf06_49_t1 =~    lambda10    0.340    0.0621   0.228
11 neuro_ideal1 =~ bf06_04_t1 =~    lambda1     0.331    0.0294   0.451
12 neuro_ideal1 =~ bf06_24_t1 =~    lambda5     0.314    0.0285   0.442

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_29_t1_r = bf06_29_t1,
         bf06_04_t1_r = bf06_04_t1,
         bf06_24_t1_r = bf06_24_t1,
         bf06_44_t1_r = bf06_44_t1,
         bf06_09_t1_r = bf06_09_t1,
         bf06_49_t1_r = bf06_49_t1,
         bf06_29_t2_r = bf06_29_t2,
         bf06_04_t2_r = bf06_04_t2,
         bf06_24_t2_r = bf06_24_t2,
         bf06_44_t2_r = bf06_44_t2,
         bf06_09_t2_r = bf06_09_t2,
         bf06_49_t2_r = bf06_49_t2) %>% 
  mutate(across(c(bf06_29_t1_r, bf06_04_t1_r, bf06_24_t1_r, bf06_44_t1_r, bf06_09_t1_r, bf06_49_t1_r, 
                  bf06_29_t2_r, bf06_04_t2_r, bf06_24_t2_r, bf06_44_t2_r, bf06_09_t2_r, bf06_49_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_ideal_par1_t1 = rowMeans(across(c(bf06_39_t1, bf06_59_t1, bf06_09_t1_r, bf06_24_t1_r)), na.rm=T),
         neuro_ideal_par2_t1 = rowMeans(across(c(bf06_34_t1, bf06_14_t1, bf06_29_t1_r, bf06_04_t1_r)), na.rm=T),
         neuro_ideal_par3_t1 = rowMeans(across(c(bf06_54_t1, bf06_19_t1, bf06_44_t1_r, bf06_49_t1_r)), na.rm=T),
         neuro_ideal_par1_t2 = rowMeans(across(c(bf06_39_t2, bf06_59_t2, bf06_09_t2_r, bf06_24_t2_r)), na.rm=T),
         neuro_ideal_par2_t2 = rowMeans(across(c(bf06_34_t2, bf06_14_t2, bf06_29_t2_r, bf06_04_t2_r)), na.rm=T),
         neuro_ideal_par3_t2 = rowMeans(across(c(bf06_54_t2, bf06_19_t2, bf06_44_t2_r, bf06_49_t2_r)), na.rm=T))

3.2.9 Openness - current self

Check CFA item loadings at T1

cfa_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*bf05_05_t1 + lambda1*bf05_05_t1 + lambda2*bf05_10_t1 + lambda3*bf05_15_t1 + lambda4*bf05_20_t1 + lambda5*bf05_25_t1 + lambda6*bf05_30_t1 + lambda7*bf05_35_t1 + lambda8*bf05_40_t1 + lambda9*bf05_45_t1 + lambda10*bf05_50_t1 + lambda11*bf05_55_t1 + lambda12*bf05_60_t1

# Intercepts
bf05_05_t1 ~ i1*1
bf05_10_t1 ~ 1
bf05_15_t1 ~ 1
bf05_20_t1 ~ 1
bf05_25_t1 ~ 1
bf05_30_t1 ~ 1
bf05_35_t1 ~ 1
bf05_40_t1 ~ 1
bf05_45_t1 ~ 1
bf05_50_t1 ~ 1
bf05_55_t1 ~ 1
bf05_60_t1 ~ 1

# Unique Variances
bf05_05_t1 ~~ bf05_05_t1
bf05_10_t1 ~~ bf05_10_t1
bf05_15_t1 ~~ bf05_15_t1
bf05_20_t1 ~~ bf05_20_t1
bf05_25_t1 ~~ bf05_25_t1
bf05_30_t1 ~~ bf05_30_t1
bf05_35_t1 ~~ bf05_35_t1
bf05_40_t1 ~~ bf05_40_t1
bf05_45_t1 ~~ bf05_45_t1
bf05_50_t1 ~~ bf05_50_t1
bf05_55_t1 ~~ bf05_55_t1
bf05_60_t1 ~~ bf05_60_t1

# Latent Variable Means
openn_curr1 ~ 0*1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
'
fit_cfa_openn_curr <- cfa(cfa_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_openn_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 42 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               724.925
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1968.166
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.647
  Tucker-Lewis Index (TLI)                       0.569
                                                      
  Robust Comparative Fit Index (CFI)             0.647
  Robust Tucker-Lewis Index (TLI)                0.569

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12474.714
  Loglikelihood unrestricted model (H1)     -12112.251
                                                      
  Akaike (AIC)                               25021.427
  Bayesian (BIC)                             25185.471
  Sample-size adjusted Bayesian (SABIC)      25071.164

Root Mean Square Error of Approximation:

  RMSEA                                          0.133
  90 Percent confidence interval - lower         0.124
  90 Percent confidence interval - upper         0.142
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.133
  90 Percent confidence interval - lower         0.124
  90 Percent confidence interval - upper         0.142
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.083

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_curr1 =~                                      
    b05_05_ (lmb1)    0.052    0.055    0.948    0.343
    b05_10_ (lmb2)   -0.532    0.040  -13.357    0.000
    b05_15_ (lmb3)   -0.466    0.044  -10.486    0.000
    b05_20_ (lmb4)   -0.754    0.050  -15.212    0.000
    b05_25_ (lmb5)    0.511    0.053    9.667    0.000
    b05_30_ (lmb6)    0.537    0.052   10.368    0.000
    b05_35_ (lmb7)   -0.700    0.044  -16.029    0.000
    b05_40_ (lmb8)   -0.389    0.040   -9.626    0.000
    b05_45_ (lmb9)    0.528    0.047   11.165    0.000
    b05_50_ (lm10)    0.673    0.055   12.224    0.000
    b05_55_ (lm11)    0.593    0.046   12.769    0.000
    b05_60_ (lm12)   -0.560    0.044  -12.592    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_1 (i1)    3.024    0.049   61.271    0.000
   .bf05_10_1         4.064    0.037  109.383    0.000
   .bf05_15_1         3.588    0.038   94.497    0.000
   .bf05_20_1         3.817    0.044   86.571    0.000
   .bf05_25_1         2.420    0.048   49.998    0.000
   .bf05_30_1         2.635    0.048   55.349    0.000
   .bf05_35_1         3.888    0.040   98.118    0.000
   .bf05_40_1         3.911    0.037  105.467    0.000
   .bf05_45_1         2.075    0.044   47.261    0.000
   .bf05_50_1         2.543    0.050   50.534    0.000
   .bf05_55_1         2.543    0.044   57.452    0.000
   .bf05_60_1         3.526    0.040   88.896    0.000
    opnn_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_t1        1.708    0.091   18.728    0.000
   .bf05_10_t1        0.689    0.042   16.217    0.000
   .bf05_15_t1        0.798    0.049   16.286    0.000
   .bf05_20_t1        0.800    0.062   12.821    0.000
   .bf05_25_t1        1.389    0.078   17.726    0.000
   .bf05_30_t1        1.304    0.074   17.513    0.000
   .bf05_35_t1        0.615    0.049   12.502    0.000
   .bf05_40_t1        0.816    0.046   17.744    0.000
   .bf05_45_t1        1.076    0.062   17.311    0.000
   .bf05_50_t1        1.330    0.081   16.493    0.000
   .bf05_55_t1        1.027    0.060   17.041    0.000
   .bf05_60_t1        0.794    0.051   15.646    0.000
    openn_curr1       1.000                           
tidy(fit_cfa_openn_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 openn_curr1 =~ bf05_20_t1 =~    lambda4   -0.754     0.0495 -0.644 
 2 openn_curr1 =~ bf05_35_t1 =~    lambda7   -0.700     0.0437 -0.666 
 3 openn_curr1 =~ bf05_50_t1 =~    lambda10   0.673     0.0550  0.504 
 4 openn_curr1 =~ bf05_55_t1 =~    lambda11   0.593     0.0465  0.505 
 5 openn_curr1 =~ bf05_60_t1 =~    lambda12  -0.560     0.0445 -0.532 
 6 openn_curr1 =~ bf05_30_t1 =~    lambda6    0.537     0.0518  0.425 
 7 openn_curr1 =~ bf05_10_t1 =~    lambda2   -0.532     0.0398 -0.539 
 8 openn_curr1 =~ bf05_45_t1 =~    lambda9    0.528     0.0473  0.454 
 9 openn_curr1 =~ bf05_25_t1 =~    lambda5    0.511     0.0528  0.398 
10 openn_curr1 =~ bf05_15_t1 =~    lambda3   -0.466     0.0444 -0.462 
11 openn_curr1 =~ bf05_40_t1 =~    lambda8   -0.389     0.0404 -0.396 
12 openn_curr1 =~ bf05_05_t1 =~    lambda1    0.0522    0.0551  0.0399

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_50_t1_r = bf05_50_t1,
         bf05_55_t1_r = bf05_55_t1,
         bf05_30_t1_r = bf05_30_t1,
         bf05_25_t1_r = bf05_25_t1,
         bf05_45_t1_r = bf05_45_t1,
         bf05_05_t1_r = bf05_05_t1,
         bf05_50_t2_r = bf05_50_t2,
         bf05_55_t2_r = bf05_55_t2,
         bf05_30_t2_r = bf05_30_t2,
         bf05_25_t2_r = bf05_25_t2,
         bf05_45_t2_r = bf05_45_t2,
         bf05_05_t2_r = bf05_05_t2) %>% 
  mutate(across(c(bf05_50_t1_r, bf05_55_t1_r, bf05_30_t1_r, bf05_25_t1_r, bf05_45_t1_r, bf05_05_t1_r,
                  bf05_50_t2_r, bf05_55_t2_r, bf05_30_t2_r, bf05_25_t2_r, bf05_45_t2_r, bf05_05_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_curr_par1_t1 = rowMeans(across(c(bf05_20_t1, bf05_30_t1_r, bf05_25_t1_r, bf05_05_t1_r)), na.rm=T),
         openn_curr_par2_t1 = rowMeans(across(c(bf05_35_t1, bf05_60_t1, bf05_45_t1_r, bf05_40_t1)), na.rm=T),
         openn_curr_par3_t1 = rowMeans(across(c(bf05_50_t1_r, bf05_55_t1_r, bf05_10_t1, bf05_15_t1)), na.rm=T),
         openn_curr_par1_t2 = rowMeans(across(c(bf05_20_t2, bf05_30_t2_r, bf05_25_t2_r, bf05_05_t2_r)), na.rm=T),
         openn_curr_par2_t2 = rowMeans(across(c(bf05_35_t2, bf05_60_t2, bf05_45_t2_r, bf05_40_t2)), na.rm=T),
         openn_curr_par3_t2 = rowMeans(across(c(bf05_50_t2_r, bf05_55_t2_r, bf05_10_t2, bf05_15_t2)), na.rm=T))

3.2.10 Openness - ideal self

Check CFA item loadings at T1

cfa_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*bf06_05_t1 + lambda1*bf06_05_t1 + lambda2*bf06_10_t1 + lambda3*bf06_15_t1 + lambda4*bf06_20_t1 + lambda5*bf06_25_t1 + lambda6*bf06_30_t1 + lambda7*bf06_35_t1 + lambda8*bf06_40_t1 + lambda9*bf06_45_t1 + lambda10*bf06_50_t1 + lambda11*bf06_55_t1 + lambda12*bf06_60_t1

# Intercepts
bf06_05_t1 ~ i1*1
bf06_10_t1 ~ 1
bf06_15_t1 ~ 1
bf06_20_t1 ~ 1
bf06_25_t1 ~ 1
bf06_30_t1 ~ 1
bf06_35_t1 ~ 1
bf06_40_t1 ~ 1
bf06_45_t1 ~ 1
bf06_50_t1 ~ 1
bf06_55_t1 ~ 1
bf06_60_t1 ~ 1

# Unique Variances
bf06_05_t1 ~~ bf06_05_t1
bf06_10_t1 ~~ bf06_10_t1
bf06_15_t1 ~~ bf06_15_t1
bf06_20_t1 ~~ bf06_20_t1
bf06_25_t1 ~~ bf06_25_t1
bf06_30_t1 ~~ bf06_30_t1
bf06_35_t1 ~~ bf06_35_t1
bf06_40_t1 ~~ bf06_40_t1
bf06_45_t1 ~~ bf06_45_t1
bf06_50_t1 ~~ bf06_50_t1
bf06_55_t1 ~~ bf06_55_t1
bf06_60_t1 ~~ bf06_60_t1

# Latent Variable Means
openn_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
'
fit_cfa_openn_ideal <- cfa(cfa_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_openn_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 48 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               365.801
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1468.753
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.778
  Tucker-Lewis Index (TLI)                       0.728
                                                      
  Robust Comparative Fit Index (CFI)             0.777
  Robust Tucker-Lewis Index (TLI)                0.728

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11578.781
  Loglikelihood unrestricted model (H1)     -11395.881
                                                      
  Akaike (AIC)                               23229.562
  Bayesian (BIC)                             23393.606
  Sample-size adjusted Bayesian (SABIC)      23279.299

Root Mean Square Error of Approximation:

  RMSEA                                          0.091
  90 Percent confidence interval - lower         0.082
  90 Percent confidence interval - upper         0.099
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.977
                                                      
  Robust RMSEA                                   0.091
  90 Percent confidence interval - lower         0.082
  90 Percent confidence interval - upper         0.100
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.978

Standardized Root Mean Square Residual:

  SRMR                                           0.061

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_ideal1 =~                                     
    b06_05_ (lmb1)    0.000    0.063    0.007    0.994
    b06_10_ (lmb2)   -0.367    0.031  -11.834    0.000
    b06_15_ (lmb3)   -0.332    0.027  -12.436    0.000
    b06_20_ (lmb4)   -0.640    0.037  -17.212    0.000
    b06_25_ (lmb5)    0.505    0.046   10.924    0.000
    b06_30_ (lmb6)    0.501    0.058    8.603    0.000
    b06_35_ (lmb7)   -0.629    0.035  -18.181    0.000
    b06_40_ (lmb8)   -0.367    0.045   -8.209    0.000
    b06_45_ (lmb9)    0.384    0.043    8.974    0.000
    b06_50_ (lm10)    0.549    0.047   11.700    0.000
    b06_55_ (lm11)    0.436    0.051    8.485    0.000
    b06_60_ (lm12)   -0.394    0.030  -13.291    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_1 (i1)    3.205    0.056   57.477    0.000
   .bf06_10_1         4.452    0.029  153.591    0.000
   .bf06_15_1         4.588    0.025  186.317    0.000
   .bf06_20_1         4.284    0.036  118.738    0.000
   .bf06_25_1         1.908    0.043   44.545    0.000
   .bf06_30_1         2.027    0.053   38.141    0.000
   .bf06_35_1         4.266    0.034  125.636    0.000
   .bf06_40_1         3.923    0.041   96.111    0.000
   .bf06_45_1         1.667    0.039   42.796    0.000
   .bf06_50_1         2.105    0.044   47.826    0.000
   .bf06_55_1         2.232    0.047   47.600    0.000
   .bf06_60_1         4.524    0.028  162.198    0.000
    openn_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_t1        2.186    0.117   18.748    0.000
   .bf06_10_t1        0.457    0.027   17.164    0.000
   .bf06_15_t1        0.317    0.019   16.579    0.000
   .bf06_20_t1        0.507    0.037   13.847    0.000
   .bf06_25_t1        1.036    0.060   17.393    0.000
   .bf06_30_t1        1.736    0.097   17.984    0.000
   .bf06_35_t1        0.416    0.032   13.100    0.000
   .bf06_40_t1        1.039    0.057   18.100    0.000
   .bf06_45_t1        0.920    0.051   17.859    0.000
   .bf06_50_t1        1.062    0.062   17.267    0.000
   .bf06_55_t1        1.358    0.075   18.030    0.000
   .bf06_60_t1        0.393    0.024   16.465    0.000
    openn_ideal1      1.000                           
tidy(fit_cfa_openn_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label     estimate std.error   std.all
   <chr>                      <chr> <chr>        <dbl>     <dbl>     <dbl>
 1 openn_ideal1 =~ bf06_20_t1 =~    lambda4  -0.640       0.0372 -0.669   
 2 openn_ideal1 =~ bf06_35_t1 =~    lambda7  -0.629       0.0346 -0.698   
 3 openn_ideal1 =~ bf06_50_t1 =~    lambda10  0.549       0.0469  0.470   
 4 openn_ideal1 =~ bf06_25_t1 =~    lambda5   0.505       0.0463  0.445   
 5 openn_ideal1 =~ bf06_30_t1 =~    lambda6   0.501       0.0582  0.355   
 6 openn_ideal1 =~ bf06_55_t1 =~    lambda11  0.436       0.0513  0.350   
 7 openn_ideal1 =~ bf06_60_t1 =~    lambda12 -0.394       0.0296 -0.532   
 8 openn_ideal1 =~ bf06_45_t1 =~    lambda9   0.384       0.0428  0.371   
 9 openn_ideal1 =~ bf06_40_t1 =~    lambda8  -0.367       0.0447 -0.339   
10 openn_ideal1 =~ bf06_10_t1 =~    lambda2  -0.367       0.0310 -0.477   
11 openn_ideal1 =~ bf06_15_t1 =~    lambda3  -0.332       0.0267 -0.507   
12 openn_ideal1 =~ bf06_05_t1 =~    lambda1   0.000466    0.0628  0.000315

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_50_t1_r = bf06_50_t1,
         bf06_55_t1_r = bf06_55_t1,
         bf06_30_t1_r = bf06_30_t1,
         bf06_25_t1_r = bf06_25_t1,
         bf06_45_t1_r = bf06_45_t1,
         bf06_05_t1_r = bf06_05_t1,
         bf06_50_t2_r = bf06_50_t2,
         bf06_55_t2_r = bf06_55_t2,
         bf06_30_t2_r = bf06_30_t2,
         bf06_25_t2_r = bf06_25_t2,
         bf06_45_t2_r = bf06_45_t2,
         bf06_05_t2_r = bf06_05_t2) %>% 
  mutate(across(c(bf06_50_t1_r, bf06_55_t1_r, bf06_30_t1_r, bf06_25_t1_r, bf06_45_t1_r, bf06_05_t1_r,
                  bf06_50_t2_r, bf06_55_t2_r, bf06_30_t2_r, bf06_25_t2_r, bf06_45_t2_r, bf06_05_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_ideal_par1_t1 = rowMeans(across(c(bf06_20_t1, bf06_55_t1_r, bf06_40_t1, bf06_05_t1)), na.rm=T),
         openn_ideal_par2_t1 = rowMeans(across(c(bf06_35_t1, bf06_30_t1_r, bf06_45_t1_r, bf06_15_t1)), na.rm=T),
         openn_ideal_par3_t1 = rowMeans(across(c(bf06_50_t1_r, bf06_25_t1_r, bf06_60_t1, bf06_10_t1)), na.rm=T),
         openn_ideal_par1_t2 = rowMeans(across(c(bf06_20_t2, bf06_55_t2_r, bf06_40_t2, bf06_05_t2)), na.rm=T),
         openn_ideal_par2_t2 = rowMeans(across(c(bf06_35_t2, bf06_30_t2_r, bf06_45_t2_r, bf06_15_t2)), na.rm=T),
         openn_ideal_par3_t2 = rowMeans(across(c(bf06_50_t2_r, bf06_25_t2_r, bf06_60_t2, bf06_10_t2)), na.rm=T))

# replace NaN with regular NA
df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
    mutate_all(~ifelse(is.nan(.), NA, .))

4 Measurement invariance

4.1 Well-being outcomes

Testing for measurement invariance of the latent traits across time.

4.1.1 Life satisfaction

Satisfaction with life scale (only the first four items - last one taps into a somewhat different construct)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + sw06_02_t1 + sw06_03_t1 + sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + sw06_02_t2 + sw06_03_t2 + sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_configural_swls <- cfa(configural_swls, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_swls, fit.measures = TRUE)

# Weak invariance model
weak_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_weak_swls <- cfa(weak_swls, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_swls, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_strong_swls <- cfa(strong_swls, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_swls, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ u1*sw06_01_t1
sw06_02_t1 ~~ u2*sw06_02_t1
sw06_03_t1 ~~ u3*sw06_03_t1
sw06_04_t1 ~~ u4*sw06_04_t1

sw06_01_t2 ~~ u1*sw06_01_t2
sw06_02_t2 ~~ u2*sw06_02_t2
sw06_03_t2 ~~ u3*sw06_03_t2
sw06_04_t2 ~~ u4*sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_strict_swls <- cfa(strict_swls, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_swls, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   714    25  288. 14504. 14618. 0.912 0.870 0.141 0.0476
2 weak         714    22  289. 14499. 14599. 0.912 0.888 0.130 0.0484
3 strong       714    19  291. 14495. 14582. 0.913 0.902 0.122 0.0483
4 strict       714    15  303. 14498. 14567. 0.910 0.913 0.115 0.0511
# chi-square difference test for nested models 
anova(fit_configural_swls, fit_weak_swls)

Chi-Squared Difference Test

                    Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_configural_swls 19 14504 14618 288.29                                    
fit_weak_swls       22 14499 14599 289.34      1.046     0       3     0.7901
anova(fit_weak_swls, fit_strong_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_swls   22 14499 14599 289.34                                    
fit_strong_swls 25 14495 14582 291.26     1.9206     0       3     0.5891
anova(fit_strong_swls, fit_strict_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)  
fit_strong_swls 25 14495 14582 291.26                                         
fit_strict_swls 29 14498 14567 302.77     11.516 0.051301       4    0.02133 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit relatively similar across model specifications. Chi^2 tests indicate that strong measurement invariance is given.

4.1.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + meaning_par2_t1 + meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + meaning_par2_t2 + meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_configural_meaning <- cfa(configural_meaning, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_meaning, fit.measures = TRUE)

# Weak invariance model
weak_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_weak_meaning <- cfa(weak_meaning, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_meaning, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_strong_meaning <- cfa(strong_meaning, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_meaning, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ u1*meaning_par1_t1
meaning_par2_t1 ~~ u2*meaning_par2_t1
meaning_par3_t1 ~~ u3*meaning_par3_t1

meaning_par1_t2 ~~ u1*meaning_par1_t2
meaning_par2_t2 ~~ u2*meaning_par2_t2
meaning_par3_t2 ~~ u3*meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_strict_meaning <- cfa(strict_meaning, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_meaning, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   714    19  268. 10703. 10790. 0.911 0.834 0.213 0.0440
2 weak         714    17  268. 10700. 10777. 0.912 0.868 0.190 0.0442
3 strong       714    15  269. 10696. 10765. 0.912 0.891 0.173 0.0444
4 strict       714    12  276. 10698. 10752. 0.911 0.911 0.156 0.0488
# chi-square difference test for nested models 
anova(fit_configural_meaning, fit_weak_meaning)

Chi-Squared Difference Test

                       Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_meaning  8 10703 10790 268.30                         
fit_weak_meaning       10 10700 10777 268.47    0.17055     0       2
                       Pr(>Chisq)
fit_configural_meaning           
fit_weak_meaning           0.9183
anova(fit_weak_meaning, fit_strong_meaning)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_meaning   10 10700 10777 268.47                                    
fit_strong_meaning 12 10696 10765 268.98     0.5041     0       2     0.7772
anova(fit_strong_meaning, fit_strict_meaning)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_meaning 12 10696 10765 268.98                                       
fit_strict_meaning 15 10698 10752 276.46     7.4836 0.045751       3    0.05798
                    
fit_strong_meaning  
fit_strict_meaning .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.1.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + selfes_par2_t1 + selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + selfes_par2_t2 + selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_configural_selfes <- cfa(configural_selfes, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_selfes, fit.measures = TRUE)

# Weak invariance model
weak_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_weak_selfes <- cfa(weak_selfes, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_selfes, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_strong_selfes <- cfa(strong_selfes, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_selfes, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ u1*selfes_par1_t1
selfes_par2_t1 ~~ u2*selfes_par2_t1
selfes_par3_t1 ~~ u3*selfes_par3_t1

selfes_par1_t2 ~~ u1*selfes_par1_t2
selfes_par2_t2 ~~ u2*selfes_par2_t2
selfes_par3_t2 ~~ u3*selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_strict_selfes <- cfa(strict_selfes, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_selfes, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   714    19  143. 7479. 7566. 0.964 0.932 0.154 0.0200
2 weak         714    17  143. 7476. 7554. 0.964 0.946 0.137 0.0226
3 strong       714    15  144. 7472. 7541. 0.965 0.956 0.124 0.0234
4 strict       714    12  146. 7469. 7523. 0.965 0.965 0.110 0.0215
# chi-square difference test for nested models 
anova(fit_configural_selfes, fit_weak_selfes)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_selfes  8 7479.4 7566.2 142.62                         
fit_weak_selfes       10 7476.2 7553.9 143.38    0.75476     0       2
                      Pr(>Chisq)
fit_configural_selfes           
fit_weak_selfes           0.6857
anova(fit_weak_selfes, fit_strong_selfes)

Chi-Squared Difference Test

                  Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_selfes   10 7476.2 7553.9 143.38                                    
fit_strong_selfes 12 7472.4 7541.0 143.66     0.2845     0       2     0.8674
anova(fit_strong_selfes, fit_strict_selfes)

Chi-Squared Difference Test

                  Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_strong_selfes 12 7472.4 7541.0 143.66                                    
fit_strict_selfes 15 7468.5 7523.4 145.76     2.1019     0       3     0.5515

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.1.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + concept_par2_t1 + concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + concept_par2_t2 + concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_configural_concept <- cfa(configural_concept, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_concept, fit.measures = TRUE)

# Weak invariance model
weak_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_weak_concept <- cfa(weak_concept, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_concept, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_strong_concept <- cfa(strong_concept, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_concept, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ u1*concept_par1_t1
concept_par2_t1 ~~ u2*concept_par2_t1
concept_par3_t1 ~~ u3*concept_par3_t1

concept_par1_t2 ~~ u1*concept_par1_t2
concept_par2_t2 ~~ u2*concept_par2_t2
concept_par3_t2 ~~ u3*concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_strict_concept <- cfa(strict_concept, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_concept, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   714    19  117. 8469. 8556. 0.959 0.923 0.138 0.0248
2 weak         714    17  121. 8469. 8547. 0.958 0.937 0.125 0.0339
3 strong       714    15  122. 8466. 8535. 0.959 0.948 0.113 0.0319
4 strict       714    12  125. 8463. 8518. 0.959 0.959 0.101 0.0357
# chi-square difference test for nested models 
anova(fit_configural_concept, fit_weak_concept)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_concept  8 8469.5 8556.3 117.30                            
fit_weak_concept       10 8469.5 8547.2 121.31     4.0127 0.037543       2
                       Pr(>Chisq)
fit_configural_concept           
fit_weak_concept           0.1345
anova(fit_weak_concept, fit_strong_concept)

Chi-Squared Difference Test

                   Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_concept   10 8469.5 8547.2 121.31                                    
fit_strong_concept 12 8466.5 8535.0 122.31    0.99821     0       2     0.6071
anova(fit_strong_concept, fit_strict_concept)

Chi-Squared Difference Test

                   Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_strong_concept 12 8466.5 8535.0 122.31                                    
fit_strict_concept 15 8463.0 8517.9 124.87     2.5587     0       3     0.4648

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2 Big Five

Testing for measurement invariance of the latent BFI-2 traits across time.

4.2.1 Extraversion: current-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + extra_curr_par2_t1 + extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + extra_curr_par2_t2 + extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_configural_extra_curr <- cfa(configural_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_extra_curr, fit.measures = TRUE)

# Weak invariance model
weak_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_weak_extra_curr <- cfa(weak_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_extra_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strong_extra_curr <- cfa(strong_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_extra_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ u1*extra_curr_par1_t1
extra_curr_par2_t1 ~~ u2*extra_curr_par2_t1
extra_curr_par3_t1 ~~ u3*extra_curr_par3_t1

extra_curr_par1_t2 ~~ u1*extra_curr_par1_t2
extra_curr_par2_t2 ~~ u2*extra_curr_par2_t2
extra_curr_par3_t2 ~~ u3*extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strict_extra_curr <- cfa(strict_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_extra_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  357. 7780. 7867. 0.862 0.740 0.247 0.0524
2 weak         715    17  358. 7777. 7855. 0.862 0.793 0.221 0.0540
3 strong       715    15  359. 7774. 7842. 0.862 0.828 0.201 0.0552
4 strict       715    12  360. 7769. 7824. 0.863 0.863 0.179 0.0547
# chi-square difference test for nested models 
anova(fit_configural_extra_curr, fit_weak_extra_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_extra_curr  8 7779.9 7866.8 356.95                         
fit_weak_extra_curr       10 7776.8 7854.5 357.80    0.84925     0       2
                          Pr(>Chisq)
fit_configural_extra_curr           
fit_weak_extra_curr            0.654
anova(fit_weak_extra_curr, fit_strong_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC Chisq Chisq diff RMSEA Df diff
fit_weak_extra_curr   10 7776.8 7854.5 357.8                         
fit_strong_extra_curr 12 7773.7 7842.3 358.7      0.893     0       2
                      Pr(>Chisq)
fit_weak_extra_curr             
fit_strong_extra_curr     0.6399
anova(fit_strong_extra_curr, fit_strict_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_extra_curr 12 7773.7 7842.3 358.69                         
fit_strict_extra_curr 15 7769.1 7823.9 360.07     1.3793     0       3
                      Pr(>Chisq)
fit_strong_extra_curr           
fit_strict_extra_curr     0.7104

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.2.2 Extraversion: ideal-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + extra_ideal_par2_t1 + extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + extra_ideal_par2_t2 + extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_configural_extra_ideal <- cfa(configural_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_extra_ideal, fit.measures = TRUE)

# Weak invariance model
weak_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_weak_extra_ideal <- cfa(weak_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_extra_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strong_extra_ideal <- cfa(strong_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_extra_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ u1*extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ u2*extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ u3*extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ u1*extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ u2*extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ u3*extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strict_extra_ideal <- cfa(strict_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_extra_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  146. 6689. 6776. 0.884 0.782 0.156 0.0514
2 weak         715    17  147. 6685. 6763. 0.885 0.828 0.138 0.0514
3 strong       715    15  153. 6688. 6756. 0.882 0.852 0.128 0.0541
4 strict       715    12  156. 6684. 6739. 0.882 0.882 0.115 0.0734
# chi-square difference test for nested models 
anova(fit_configural_extra_ideal, fit_weak_extra_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_extra_ideal  8 6689.3 6776.2 146.47                         
fit_weak_extra_ideal       10 6685.4 6763.1 146.52   0.045527     0       2
                           Pr(>Chisq)
fit_configural_extra_ideal           
fit_weak_extra_ideal           0.9775
anova(fit_weak_extra_ideal, fit_strong_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_extra_ideal   10 6685.4 6763.1 146.52                            
fit_strong_extra_ideal 12 6687.8 6756.4 152.96     6.4435 0.055743       2
                       Pr(>Chisq)  
fit_weak_extra_ideal               
fit_strong_extra_ideal    0.03989 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_strong_extra_ideal, fit_strict_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_extra_ideal 12 6687.8 6756.4 152.96                         
fit_strict_extra_ideal 15 6684.5 6739.3 155.63     2.6654     0       3
                       Pr(>Chisq)
fit_strong_extra_ideal           
fit_strict_extra_ideal     0.4461

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.3 Agreeableness: current-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + agree_curr_par2_t1 + agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + agree_curr_par2_t2 + agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_configural_agree_curr <- cfa(configural_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_agree_curr, fit.measures = TRUE)

# Weak invariance model
weak_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_weak_agree_curr <- cfa(weak_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_agree_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strong_agree_curr <- cfa(strong_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_agree_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ u1*agree_curr_par1_t1
agree_curr_par2_t1 ~~ u2*agree_curr_par2_t1
agree_curr_par3_t1 ~~ u3*agree_curr_par3_t1

agree_curr_par1_t2 ~~ u1*agree_curr_par1_t2
agree_curr_par2_t2 ~~ u2*agree_curr_par2_t2
agree_curr_par3_t2 ~~ u3*agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strict_agree_curr <- cfa(strict_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_agree_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  202. 6509. 6596. 0.885 0.784 0.184 0.0541
2 weak         715    17  204. 6507. 6584. 0.885 0.828 0.165 0.0606
3 strong       715    15  205. 6504. 6572. 0.886 0.857 0.150 0.0590
4 strict       715    12  219. 6512. 6567. 0.879 0.879 0.138 0.0821
# chi-square difference test for nested models 
anova(fit_configural_agree_curr, fit_weak_agree_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_curr  8 6509.1 6595.9 202.19                         
fit_weak_agree_curr       10 6506.7 6584.4 203.84     1.6455     0       2
                          Pr(>Chisq)
fit_configural_agree_curr           
fit_weak_agree_curr           0.4392
anova(fit_weak_agree_curr, fit_strong_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_agree_curr   10 6506.7 6584.4 203.84                         
fit_strong_agree_curr 12 6503.9 6572.5 205.03     1.1924     0       2
                      Pr(>Chisq)
fit_weak_agree_curr             
fit_strong_agree_curr     0.5509
anova(fit_strong_agree_curr, fit_strict_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_agree_curr 12 6503.9 6572.5 205.03                            
fit_strict_agree_curr 15 6511.6 6566.5 218.76     13.733 0.070738       3
                      Pr(>Chisq)   
fit_strong_agree_curr              
fit_strict_agree_curr   0.003292 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit still not satisfactory. Chi^2 tests indicate that strong measurement invariance is given.

4.2.4 Agreeableness: ideal-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + agree_ideal_par2_t1 + agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + agree_ideal_par2_t2 + agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_configural_agree_ideal <- cfa(configural_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_agree_ideal, fit.measures = TRUE)

# Weak invariance model
weak_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_weak_agree_ideal <- cfa(weak_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_agree_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strong_agree_ideal <- cfa(strong_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_agree_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ u1*agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ u2*agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ u3*agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ u1*agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ u2*agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ u3*agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strict_agree_ideal <- cfa(strict_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_agree_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  163. 6608. 6695. 0.914 0.838 0.165 0.0504
2 weak         715    17  164. 6604. 6682. 0.915 0.872 0.147 0.0511
3 strong       715    15  166. 6602. 6671. 0.915 0.893 0.134 0.0506
4 strict       715    12  168. 6599. 6653. 0.915 0.915 0.119 0.0548
# chi-square difference test for nested models 
anova(fit_configural_agree_ideal, fit_weak_agree_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_ideal  8 6608.0 6694.8 163.41                         
fit_weak_agree_ideal       10 6604.1 6681.8 163.55    0.13458     0       2
                           Pr(>Chisq)
fit_configural_agree_ideal           
fit_weak_agree_ideal           0.9349
anova(fit_weak_agree_ideal, fit_strong_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_agree_ideal   10 6604.1 6681.8 163.55                            
fit_strong_agree_ideal 12 6602.3 6670.9 165.73     2.1834 0.011324       2
                       Pr(>Chisq)
fit_weak_agree_ideal             
fit_strong_agree_ideal     0.3356
anova(fit_strong_agree_ideal, fit_strict_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_agree_ideal 12 6602.3 6670.9 165.73                         
fit_strict_agree_ideal 15 6598.5 6653.4 167.98     2.2504     0       3
                       Pr(>Chisq)
fit_strong_agree_ideal           
fit_strict_agree_ideal     0.5221

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.5 Conscientiousness: current-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + consc_curr_par2_t1 + consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + consc_curr_par2_t2 + consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_configural_consc_curr <- cfa(configural_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_consc_curr, fit.measures = TRUE)

# Weak invariance model
weak_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_weak_consc_curr <- cfa(weak_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_consc_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strong_consc_curr <- cfa(strong_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_consc_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ u1*consc_curr_par1_t1
consc_curr_par2_t1 ~~ u2*consc_curr_par2_t1
consc_curr_par3_t1 ~~ u3*consc_curr_par3_t1

consc_curr_par1_t2 ~~ u1*consc_curr_par1_t2
consc_curr_par2_t2 ~~ u2*consc_curr_par2_t2
consc_curr_par3_t2 ~~ u3*consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strict_consc_curr <- cfa(strict_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_consc_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  298. 7123. 7210. 0.916 0.843 0.225 0.0345
2 weak         715    17  299. 7121. 7198. 0.917 0.875 0.201 0.0371
3 strong       715    15  305. 7122. 7191. 0.916 0.894 0.185 0.0392
4 strict       715    12  315. 7126. 7181. 0.914 0.914 0.167 0.0446
# chi-square difference test for nested models 
anova(fit_configural_consc_curr, fit_weak_consc_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_consc_curr  8 7123.3 7210.2 297.84                         
fit_weak_consc_curr       10 7120.6 7198.3 299.04     1.2051     0       2
                          Pr(>Chisq)
fit_configural_consc_curr           
fit_weak_consc_curr           0.5474
anova(fit_weak_consc_curr, fit_strong_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff
fit_weak_consc_curr   10 7120.6 7198.3 299.04                           
fit_strong_consc_curr 12 7122.2 7190.8 304.72     5.6787 0.05072       2
                      Pr(>Chisq)  
fit_weak_consc_curr               
fit_strong_consc_curr    0.05846 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_strong_consc_curr, fit_strict_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff
fit_strong_consc_curr 12 7122.2 7190.8 304.72                           
fit_strict_consc_curr 15 7126.0 7180.9 314.53     9.8061 0.05633       3
                      Pr(>Chisq)  
fit_strong_consc_curr             
fit_strict_consc_curr    0.02029 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.2.6 Conscientiousness: ideal-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + consc_ideal_par2_t1 + consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + consc_ideal_par2_t2 + consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_configural_consc_ideal <- cfa(configural_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_consc_ideal, fit.measures = TRUE)

# Weak invariance model
weak_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_weak_consc_ideal <- cfa(weak_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_consc_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strong_consc_ideal <- cfa(strong_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_consc_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ u1*consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ u2*consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ u3*consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ u1*consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ u2*consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ u3*consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strict_consc_ideal <- cfa(strict_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_consc_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   715    19  64.9 5583. 5669. 0.965 0.934 0.0997 0.0256
2 weak         715    17  64.9 5579. 5656. 0.966 0.949 0.0876 0.0257
3 strong       715    15  65.2 5575. 5643. 0.967 0.959 0.0787 0.0259
4 strict       715    12  80.3 5584. 5639. 0.959 0.959 0.0780 0.0846
# chi-square difference test for nested models 
anova(fit_configural_consc_ideal, fit_weak_consc_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_consc_ideal  8 5582.6 5669.4 64.866                         
fit_weak_consc_ideal       10 5578.6 5656.3 64.878    0.01134     0       2
                           Pr(>Chisq)
fit_configural_consc_ideal           
fit_weak_consc_ideal           0.9943
anova(fit_weak_consc_ideal, fit_strong_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_consc_ideal   10 5578.6 5656.3 64.878                         
fit_strong_consc_ideal 12 5574.9 5643.5 65.187      0.309     0       2
                       Pr(>Chisq)
fit_weak_consc_ideal             
fit_strong_consc_ideal     0.8568
anova(fit_strong_consc_ideal, fit_strict_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_consc_ideal 12 5574.9 5643.5 65.187                            
fit_strict_consc_ideal 15 5584.0 5638.9 80.313     15.126 0.075188       3
                       Pr(>Chisq)   
fit_strong_consc_ideal              
fit_strict_consc_ideal   0.001712 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.2.7 Neuroticism: current-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + neuro_curr_par2_t1 + neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + neuro_curr_par2_t2 + neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_configural_neuro_curr <- cfa(configural_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_neuro_curr, fit.measures = TRUE)

# Weak invariance model
weak_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_weak_neuro_curr <- cfa(weak_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_neuro_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strong_neuro_curr <- cfa(strong_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_neuro_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ u1*neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ u2*neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ u3*neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ u1*neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ u2*neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ u3*neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strict_neuro_curr <- cfa(strict_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_neuro_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  242. 7956. 8043. 0.929 0.867 0.202 0.0354
2 weak         715    17  244. 7953. 8031. 0.929 0.894 0.181 0.0380
3 strong       715    15  246. 7952. 8020. 0.929 0.912 0.165 0.0368
4 strict       715    12  247. 7947. 8001. 0.930 0.930 0.147 0.0381
# chi-square difference test for nested models 
anova(fit_configural_neuro_curr, fit_weak_neuro_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_neuro_curr  8 7955.8 8042.7 242.32                         
fit_weak_neuro_curr       10 7953.0 8030.8 243.54     1.2213     0       2
                          Pr(>Chisq)
fit_configural_neuro_curr           
fit_weak_neuro_curr            0.543
anova(fit_weak_neuro_curr, fit_strong_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_neuro_curr   10 7953.0 8030.8 243.54                            
fit_strong_neuro_curr 12 7951.9 8020.5 246.41     2.8662 0.024611       2
                      Pr(>Chisq)
fit_weak_neuro_curr             
fit_strong_neuro_curr     0.2386
anova(fit_strong_neuro_curr, fit_strict_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_neuro_curr 12 7951.9 8020.5 246.41                         
fit_strict_neuro_curr 15 7946.5 8001.4 247.04    0.63411     0       3
                      Pr(>Chisq)
fit_strong_neuro_curr           
fit_strict_neuro_curr     0.8886

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.8 Neuroticism: ideal-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + neuro_ideal_par2_t1 + neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + neuro_ideal_par2_t2 + neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_configural_neuro_ideal <- cfa(configural_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_neuro_ideal, fit.measures = TRUE)

# Weak invariance model
weak_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_weak_neuro_ideal <- cfa(weak_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_neuro_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strong_neuro_ideal <- cfa(strong_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_neuro_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ u1*neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ u2*neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ u3*neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ u1*neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ u2*neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ u3*neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strict_neuro_ideal <- cfa(strict_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_neuro_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   715    19  39.7 5816. 5903. 0.979 0.961 0.0745 0.0217
2 weak         715    17  41.2 5814. 5891. 0.979 0.969 0.0661 0.0261
3 strong       715    15  41.8 5810. 5879. 0.980 0.975 0.0589 0.0252
4 strict       715    12  43.9 5806. 5861. 0.981 0.981 0.0519 0.0358
# chi-square difference test for nested models 
anova(fit_configural_neuro_ideal, fit_weak_neuro_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_neuro_ideal  8 5816.1 5903.0 39.709                         
fit_weak_neuro_ideal       10 5813.6 5891.3 41.207     1.4977     0       2
                           Pr(>Chisq)
fit_configural_neuro_ideal           
fit_weak_neuro_ideal           0.4729
anova(fit_weak_neuro_ideal, fit_strong_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_neuro_ideal   10 5813.6 5891.3 41.207                         
fit_strong_neuro_ideal 12 5810.2 5878.8 41.777    0.57064     0       2
                       Pr(>Chisq)
fit_weak_neuro_ideal             
fit_strong_neuro_ideal     0.7518
anova(fit_strong_neuro_ideal, fit_strict_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_neuro_ideal 12 5810.2 5878.8 41.777                         
fit_strict_neuro_ideal 15 5806.3 5861.2 43.907     2.1301     0       3
                       Pr(>Chisq)
fit_strong_neuro_ideal           
fit_strict_neuro_ideal     0.5459

Good model fit across all stages of measurement invariance. Chi^2 tests indicate that strict measurement invariance is given.

4.2.9 Openness: current-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + openn_curr_par2_t1 + openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + openn_curr_par2_t2 + openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_configural_openn_curr <- cfa(configural_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_openn_curr, fit.measures = TRUE)

# Weak invariance model
weak_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_weak_openn_curr <- cfa(weak_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_openn_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strong_openn_curr <- cfa(strong_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_openn_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ u1*openn_curr_par1_t1
openn_curr_par2_t1 ~~ u2*openn_curr_par2_t1
openn_curr_par3_t1 ~~ u3*openn_curr_par3_t1

openn_curr_par1_t2 ~~ u1*openn_curr_par1_t2
openn_curr_par2_t2 ~~ u2*openn_curr_par2_t2
openn_curr_par3_t2 ~~ u3*openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strict_openn_curr <- cfa(strict_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_openn_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  223. 7148. 7235. 0.899 0.810 0.194 0.0499
2 weak         715    17  224. 7144. 7222. 0.899 0.849 0.173 0.0504
3 strong       715    15  227. 7143. 7212. 0.899 0.874 0.158 0.0499
4 strict       715    12  233. 7144. 7199. 0.897 0.897 0.143 0.0580
# chi-square difference test for nested models 
anova(fit_configural_openn_curr, fit_weak_openn_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_openn_curr  8 7147.8 7234.7 223.42                         
fit_weak_openn_curr       10 7143.9 7221.7 223.55    0.12185     0       2
                          Pr(>Chisq)
fit_configural_openn_curr           
fit_weak_openn_curr           0.9409
anova(fit_weak_openn_curr, fit_strong_openn_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_openn_curr   10 7143.9 7221.7 223.55                            
fit_strong_openn_curr 12 7143.1 7211.7 226.74      3.191 0.028859       2
                      Pr(>Chisq)
fit_weak_openn_curr             
fit_strong_openn_curr     0.2028
anova(fit_strong_openn_curr, fit_strict_openn_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_curr 12 7143.1 7211.7 226.74                            
fit_strict_openn_curr 15 7143.8 7198.7 233.40       6.66 0.041307       3
                      Pr(>Chisq)  
fit_strong_openn_curr             
fit_strict_openn_curr    0.08356 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.10 Openness: ideal-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + openn_ideal_par2_t1 + openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + openn_ideal_par2_t2 + openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_configural_openn_ideal <- cfa(configural_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_openn_ideal, fit.measures = TRUE)

# Weak invariance model
weak_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_weak_openn_ideal <- cfa(weak_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_openn_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strong_openn_ideal <- cfa(strong_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_openn_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ u1*openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ u2*openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ u3*openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ u1*openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ u2*openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ u3*openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strict_openn_ideal <- cfa(strict_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_openn_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   715    19  91.6 6737. 6824. 0.938 0.885 0.121  0.0424
2 weak         715    17  91.9 6733. 6811. 0.940 0.909 0.107  0.0432
3 strong       715    15  95.2 6732. 6801. 0.939 0.923 0.0985 0.0464
4 strict       715    12 105.  6736. 6791. 0.934 0.934 0.0916 0.0803
# chi-square difference test for nested models 
anova(fit_configural_openn_ideal, fit_weak_openn_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_openn_ideal  8 6736.8 6823.7 91.632                         
fit_weak_openn_ideal       10 6733.1 6810.8 91.936    0.30435     0       2
                           Pr(>Chisq)
fit_configural_openn_ideal           
fit_weak_openn_ideal           0.8588
anova(fit_weak_openn_ideal, fit_strong_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_openn_ideal   10 6733.1 6810.8 91.936                            
fit_strong_openn_ideal 12 6732.4 6801.0 95.230     3.2938 0.030079       2
                       Pr(>Chisq)
fit_weak_openn_ideal             
fit_strong_openn_ideal     0.1926
anova(fit_strong_openn_ideal, fit_strict_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC  BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_ideal 12 6732.4 6801  95.23                            
fit_strict_openn_ideal 15 6736.1 6791 104.98      9.745 0.056076       3
                       Pr(>Chisq)  
fit_strong_openn_ideal             
fit_strict_openn_ideal    0.02086 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.


5 Descriptives

5.1 Sample size

How many participants at each time point and in each condition?

df_sbsa %>% summarise(n_distinct(pid)) # N (after exclusions)
# A tibble: 1 × 1
  `n_distinct(pid)`
              <int>
1               715
df_sbsa %>% group_by(time, rando) %>% tally()
# A tibble: 4 × 3
# Groups:   time [2]
   time rando                n
  <dbl> <chr>            <int>
1     1 Self-Acceptance    343
2     1 Self-Improvement   364
3     2 Self-Acceptance    326
4     2 Self-Improvement   338

707 at T1 because for 8 participants we only included valid data from T2.

5.2 Demographics

Gender and age distribution

# across all participants
df_sbsa %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  mutate(gender_num = ifelse(gender=="Female", 1, 0)) %>% 
  summarise(n = n(), women = sum(gender_num), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 1 × 6
      n women m_age sd_age min_age max_age
  <int> <dbl> <dbl>  <dbl>   <dbl>   <dbl>
1   715   358  30.7   9.44      19      69
# by group and time point
df_sbsa %>% group_by(time, rando) %>% 
  summarise(n = n(), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 4 × 7
# Groups:   time [2]
   time rando                n m_age sd_age min_age max_age
  <dbl> <chr>            <int> <dbl>  <dbl>   <dbl>   <dbl>
1     1 Self-Acceptance    343  30.8   9.18      19      66
2     1 Self-Improvement   364  30.4   9.41      19      69
3     2 Self-Acceptance    326  30.9   9.42      19      66
4     2 Self-Improvement   338  30.6   9.63      19      69
df_sbsa %>% group_by(time, rando, gender) %>% 
  summarise(n = n(), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 8 × 8
# Groups:   time, rando [4]
   time rando            gender     n m_age sd_age min_age max_age
  <dbl> <chr>            <chr>  <int> <dbl>  <dbl>   <dbl>   <dbl>
1     1 Self-Acceptance  Female   175  30.8   9.10      19      63
2     1 Self-Acceptance  Male     168  30.9   9.29      19      66
3     1 Self-Improvement Female   180  30.3   8.89      19      59
4     1 Self-Improvement Male     184  30.5   9.92      19      69
5     2 Self-Acceptance  Female   161  30.6   9.34      19      63
6     2 Self-Acceptance  Male     165  31.1   9.53      19      66
7     2 Self-Improvement Female   168  30.2   8.82      19      59
8     2 Self-Improvement Male     170  31.0  10.4       19      69

Other demographics (from Prolific info):

# across all participants: ethnicity
df_sbsa %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(ethnicity) %>% summarise(n = n()) %>% ungroup() %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 6 × 3
  ethnicity     n   prop
  <chr>     <int>  <dbl>
1 Asian        15  2.10 
2 Black       193 27.0  
3 Mixed        34  4.76 
4 Other        12  1.68 
5 White       457 63.9  
6 <NA>          4  0.559
# across all participants: country of residence
df_sbsa %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(country) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3)) %>% print(n=20)
# A tibble: 30 × 3
   country            n   prop
   <chr>          <int>  <dbl>
 1 South Africa     218 30.5  
 2 Poland           124 17.3  
 3 United Kingdom    63  8.81 
 4 Italy             59  8.25 
 5 Portugal          51  7.13 
 6 Greece            50  6.99 
 7 Spain             34  4.76 
 8 Hungary           27  3.78 
 9 Czech Republic    13  1.82 
10 Mexico             9  1.26 
11 Netherlands        9  1.26 
12 Estonia            7  0.979
13 Germany            5  0.699
14 Latvia             5  0.699
15 Australia          4  0.559
16 Belgium            4  0.559
17 France             4  0.559
18 Ireland            4  0.559
19 Slovenia           4  0.559
20 Sweden             4  0.559
# ℹ 10 more rows
# across all participants: student status
df_sbsa %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(student) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 3 × 3
  student     n  prop
  <chr>   <int> <dbl>
1 No        373 52.2 
2 Yes       285 39.9 
3 <NA>       57  7.97
# across all participants: employment status
df_sbsa %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(employed) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 7 × 3
  employed                                                     n  prop
  <chr>                                                    <int> <dbl>
1 Full-Time                                                  336 47.0 
2 Part-Time                                                  118 16.5 
3 Unemployed (and job seeking)                                88 12.3 
4 <NA>                                                        71  9.93
5 Other                                                       60  8.39
6 Not in paid work (e.g. homemaker', 'retired or disabled)    29  4.06
7 Due to start a new job within the next month                13  1.82

5.3 Internal consistencies

On the trait/dimensional level:

# created in study 1 cleaning script 
kable(int_consist_traits_st1, digits = 3)
trait rel_alpha_current rel_alpha_ideal rel_omega_t_current rel_omega_t_ideal rel_omega_h_current rel_omega_h_ideal
lifesat 0.860 NA 0.890 NA 0.720 NA
meaning 0.861 NA 0.932 NA 0.512 NA
selfes 0.904 NA 0.921 NA 0.704 NA
concept 0.879 NA 0.900 NA 0.748 NA
extra 0.831 0.695 0.867 0.754 0.639 0.462
agree 0.777 0.768 0.831 0.822 0.573 0.636
consc 0.876 0.793 0.899 0.827 0.726 0.682
neuro 0.894 0.762 0.913 0.808 0.733 0.674
openn 0.777 0.718 0.834 0.797 0.580 0.554

McDonald’s omega only really makes sense for the Big Five dimensions (with their three facets each) but I’ve added it for the well-being measures as well. Keep in mind that a few of the omega computations for the well-being measures only converged with error messages. These constructs were not neccessarily intended to be tested in this multidimensional manner for internal consistency.

On the facet level:

# created in study 1 cleaning script 
kable(int_consist_facets_st1, digits = 3)
facet rel_alpha_current rel_alpha_ideal
socia 0.801 0.604
asser 0.697 0.531
energ 0.691 0.502
compa 0.496 0.450
respe 0.694 0.623
trust 0.644 0.619
organ 0.827 0.562
produ 0.770 0.640
respo 0.644 0.571
anxie 0.726 0.421
depre 0.811 0.556
volat 0.810 0.651
curio 0.620 0.506
aesth 0.574 0.448
imagi 0.705 0.526

5.4 General change/acceptance goals

Summary stats:

table(df_sbsa$sb06_01) # How much do you want to change your personality in general?

  1   2   3   4   5 
 22  63 153  90  28 
summary(df_sbsa$sb06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   1.00    3.00    3.00    3.11    4.00    5.00    1015 
table(df_sbsa$sa06_01) # How much do you want to be better at accepting yourself for who you are?

  1   2   3   4   5 
  6  10  50 110 163 
summary(df_sbsa$sa06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.000   4.000   4.000   4.221   5.000   5.000    1032 

Plot:

cowplot::plot_grid(
  ggplot(df_sbsa %>% filter(!is.na(sb06_01)), aes(x=sb06_01)) + geom_histogram(bins=5) + 
  labs(x="General change goal", y="Frequency") + theme_bw(),
  ggplot(df_sbsa %>% filter(!is.na(sa06_01)), aes(x=sa06_01)) + geom_histogram(bins=5) + 
  labs(x="General acceptance goal", y="Frequency") + theme_bw(), 
  ncol = 2
)

5.5 Facet-specific change/acceptance goals

Self-Improvement

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you [want to] change. Please rate how much you would like to change your level of each of these traits, where 1 = I do not want to change and 5 = I want to change a lot.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to change in some of these traits. We want to know how you think you changed in each trait. Please rate how much you changed your level of each of these traits during this study, where 1 = I am completely the same and 5 = I have changed a lot.

Self Acceptance

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you accept yourself. Please rate how much you accept your level of each of these traits, where 1 = I completely accept myself and 5 = I want to accept myself more.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to accept your level on some of these traits more. We want to know how much you think you accept yourself more because of this study. Please rate how much you accept your level of each of these traits more during this study, where 1 = I accept myself the same and 5 = I accept this about myself much more.

Plot distributions

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 01], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_01)), aes(x=sb07_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_01)), aes(x=sb12_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_01)), aes(x=sa07_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_01)), aes(x=sa14_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 02], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_02)), aes(x=sb07_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_02)), aes(x=sb12_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_02)), aes(x=sa07_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_02)), aes(x=sa14_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 03], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_03)), aes(x=sb07_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_03)), aes(x=sb12_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_03)), aes(x=sa07_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_03)), aes(x=sa14_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 04], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_04)), aes(x=sb07_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_04)), aes(x=sb12_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_04)), aes(x=sa07_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_04)), aes(x=sa14_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 05], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_05)), aes(x=sb07_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_05)), aes(x=sb12_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_05)), aes(x=sa07_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_05)), aes(x=sa14_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 06], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_06)), aes(x=sb07_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_06)), aes(x=sb12_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_06)), aes(x=sa07_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_06)), aes(x=sa14_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 07], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_07)), aes(x=sb07_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_07)), aes(x=sb12_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_07)), aes(x=sa07_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_07)), aes(x=sa14_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 08], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_08)), aes(x=sb07_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_08)), aes(x=sb12_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_08)), aes(x=sa07_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_08)), aes(x=sa14_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 09], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_09)), aes(x=sb07_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_09)), aes(x=sb12_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_09)), aes(x=sa07_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_09)), aes(x=sa14_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 10], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_10)), aes(x=sb07_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_10)), aes(x=sb12_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_10)), aes(x=sa07_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_10)), aes(x=sa14_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 11], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_11)), aes(x=sb07_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_11)), aes(x=sb12_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_11)), aes(x=sa07_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_11)), aes(x=sa14_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 12], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_12)), aes(x=sb07_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_12)), aes(x=sb12_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_12)), aes(x=sa07_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_12)), aes(x=sa14_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 13], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_13)), aes(x=sb07_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_13)), aes(x=sb12_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_13)), aes(x=sa07_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_13)), aes(x=sa14_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 14], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_14)), aes(x=sb07_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_14)), aes(x=sb12_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_14)), aes(x=sa07_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_14)), aes(x=sa14_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 15], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_15)), aes(x=sb07_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_15)), aes(x=sb12_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_15)), aes(x=sa07_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_15)), aes(x=sa14_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)


6 Confirmatory results

6.1 H1: Well-being - similarity correlations (H4 in paper)

All four psychological well-being indicators will be positively correlated with a greater similarity between current- and ideal self-ratings of personality.

To examine this at the level of overall profiles, we will compute the correlations between the psychological well-being indicators and the Fisher z transformed correlations between the facet- and item-level real-ideal self-profiles. To examine this at the level of individual traits, we will compute the correlation between psychological well-being indicators and the squared difference between current- and ideal-self rating for each Big Five trait and facet.

6.1.1 Profile similarity

Computations:

Show the code
cormat_profile <- cor(df_sbsa[, c("swls", "meaning", "selfes", "concept",
                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")

rownames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
corrplot(cormat_profile, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Positive correlations of well-being indicators with profile similarity between current self and ideal self personality. Especially high correlation with self-esteem. High congruence of item-level and facet-level profile similarity.

6.1.2 Individual traits: squared differences

Computations:

Show the code
cormat_sqtraits <- cor(df_sbsa[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqfacets <- cor(df_sbsa[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[6:20], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))
colnames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))

Big Five traits

corrplot(cormat_sqtraits, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Big Five facets

corrplot(cormat_sqfacets, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.6, diag = FALSE) # also add numbers

Here we see negative correlations of well-being indicators with squared trait- and facet-level mean-score differences between current self and ideal self personality. Especially pronounced negative correlations for neuroticism, extraversion, and conscientiousness (in that order).

6.1.2.1 Exploratory: Controlling for initial trait levels

Additional, exploratory analysis: Are the relationships of the squared trait differences with well-being similar when we control for initial trait levels (at T1)?

Example with extraversion:

cor(df_sbsa %>% filter(rando!="Waitlist-Control" & time==1) %>% pull(swls), 
    df_sbsa %>% filter(rando!="Waitlist-Control" & time==1) %>% pull(extra_sqdiff), 
    use = "pairwise.complete.obs") %>% round(2)
[1] -0.36
# basic model to replicate the correlation
mod_ex_1 <- lm(swls ~ extra_sqdiff, data = df_sbsa %>% filter(rando!="Waitlist-Control" & time==1))
summary(mod_ex_1)$coef
               Estimate Std. Error   t value      Pr(>|t|)
(Intercept)   2.9651060 0.04450560  66.62322 5.355442e-304
extra_sqdiff -0.1640454 0.01612553 -10.17303  9.362207e-23
effectsize::standardize_parameters(mod_ex_1)
# Standardization method: refit

Parameter    | Std. Coef. |         95% CI
------------------------------------------
(Intercept)  |   2.37e-16 | [-0.07,  0.07]
extra_sqdiff |      -0.36 | [-0.43, -0.29]
# adjusted model controlling for initial trait level
mod_ex_2 <- lm(swls ~ extra_sqdiff + extra_comb_curr, 
               data = df_sbsa %>% filter(rando!="Waitlist-Control" & time==1))
summary(mod_ex_2)$coef
                   Estimate Std. Error   t value     Pr(>|t|)
(Intercept)      1.77356826 0.21622836  8.202293 1.142937e-15
extra_sqdiff    -0.07301225 0.02260265 -3.230252 1.295161e-03
extra_comb_curr  0.36661193 0.06516538  5.625870 2.678215e-08
effectsize::standardize_parameters(mod_ex_2)
# Standardization method: refit

Parameter       | Std. Coef. |         95% CI
---------------------------------------------
(Intercept)     |   1.78e-16 | [-0.07,  0.07]
extra_sqdiff    |      -0.16 | [-0.26, -0.06]
extra_comb_curr |       0.28 | [ 0.18,  0.38]

Reduced correlation (effect size) in the adjusted model but still significant.

Only T1:

Show the code
# prepare df
df_check_adjusted <- df_sbsa %>% 
  # reshape with well-being outcomes and current trait levels
  filter(rando!="Waitlist-Control" & time==1) %>% 
  select(pid, rando, 
         swls, meaning, selfes, concept,
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "initial", values_drop_na = TRUE) %>% 
  mutate(test = sub("_.*", "", test)) %>% 
  left_join(
    df_sbsa %>% 
    # reshape with squared differences -> add to previous
      filter(rando!="Waitlist-Control" & time==1) %>% 
      select(pid, rando, ends_with("_sqdiff")) %>% 
      pivot_longer(ends_with("_sqdiff"), 
                   names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
      mutate(test = sub("_.*", "", test))
  )

# run models 
# swls
df_check_adjusted_swls <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ swls + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_swls_unlist <- as.data.frame(summary(df_check_adjusted_swls[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_swls)) {
  df_check_adjusted_swls_unlist <- 
    bind_rows(df_check_adjusted_swls_unlist, 
              as.data.frame(summary(df_check_adjusted_swls[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls[[i]])$Std_Coefficient))
}
df_check_adjusted_swls_unlist <- df_check_adjusted_swls_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "swls", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# meaning
df_check_adjusted_meaning <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ meaning + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_meaning_unlist <- as.data.frame(summary(df_check_adjusted_meaning[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_meaning)) {
  df_check_adjusted_meaning_unlist <- 
    bind_rows(df_check_adjusted_meaning_unlist, 
              as.data.frame(summary(df_check_adjusted_meaning[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning[[i]])$Std_Coefficient))
}
df_check_adjusted_meaning_unlist <- df_check_adjusted_meaning_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "meaning", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# selfes
df_check_adjusted_selfes <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ selfes + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_selfes_unlist <- as.data.frame(summary(df_check_adjusted_selfes[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_selfes)) {
  df_check_adjusted_selfes_unlist <- 
    bind_rows(df_check_adjusted_selfes_unlist, 
              as.data.frame(summary(df_check_adjusted_selfes[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes[[i]])$Std_Coefficient))
}
df_check_adjusted_selfes_unlist <- df_check_adjusted_selfes_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "selfes", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# concept
df_check_adjusted_concept <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ concept + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_concept_unlist <- as.data.frame(summary(df_check_adjusted_concept[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_concept)) {
  df_check_adjusted_concept_unlist <- 
    bind_rows(df_check_adjusted_concept_unlist, 
              as.data.frame(summary(df_check_adjusted_concept[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept[[i]])$Std_Coefficient))
}
df_check_adjusted_concept_unlist <- df_check_adjusted_concept_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "concept", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

Does the relationship between the squared difference in one trait (current vs. ideal) and well-being aspects still hold if we control for the initial trait level?

Combine as one table:

kable(df_check_adjusted_swls_unlist %>% 
        filter(!term %in% c("Intercept", "initial")) %>% 
        select(outcome, d_swls = d, p_ls = p, sig_ls = sig) %>% 
        left_join(
          df_check_adjusted_meaning_unlist %>% 
            filter(!term %in% c("Intercept", "initial")) %>% 
            select(outcome, d_meaning = d, p_m = p, sig_m = sig)
        ) %>% 
          left_join(
            df_check_adjusted_selfes_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_selfes = d, p_se = p, sig_se = sig)
          ) %>% 
          left_join(
            df_check_adjusted_concept_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_concept = d, p_c = p, sig_c = sig)
          ), 
       digits = 3)
outcome d_swls p_ls sig_ls d_meaning p_m sig_m d_selfes p_se sig_se d_concept p_c sig_c
extraversion -0.092 0.001 ** -0.066 0.017 * -0.062 0.050 -0.032 0.254
agreeableness -0.090 0.007 ** -0.082 0.014 * -0.078 0.020 * -0.087 0.010 **
conscientiousness -0.104 0.000 *** -0.117 0.000 *** -0.063 0.024 * -0.049 0.063
neuroticism -0.083 0.001 *** -0.079 0.001 ** -0.029 0.317 0.029 0.259
openness -0.099 0.002 ** -0.128 0.000 *** -0.111 0.001 *** -0.059 0.071
sociability -0.137 0.000 *** -0.092 0.002 ** -0.081 0.008 ** -0.051 0.076
assertiveness -0.082 0.007 ** -0.073 0.016 * -0.030 0.361 -0.033 0.280
energy -0.110 0.000 *** -0.055 0.054 -0.065 0.050 * -0.040 0.165
compassion -0.063 0.085 -0.066 0.072 -0.104 0.004 ** -0.084 0.022 *
respectfulness -0.077 0.013 * -0.043 0.167 -0.025 0.428 -0.074 0.019 *
trust -0.090 0.006 ** -0.096 0.003 ** -0.095 0.005 ** -0.100 0.003 **
organization -0.086 0.001 *** -0.108 0.000 *** -0.035 0.185 -0.033 0.197
productiveness -0.072 0.002 ** -0.069 0.003 ** -0.044 0.086 -0.031 0.196
responsibility -0.143 0.000 *** -0.107 0.000 *** -0.074 0.021 * -0.049 0.123
anxiety -0.063 0.017 * -0.064 0.014 * -0.028 0.338 0.015 0.585
depression -0.100 0.000 *** -0.081 0.001 *** -0.047 0.117 0.015 0.523
volatility -0.090 0.000 *** -0.083 0.001 *** -0.064 0.016 * -0.006 0.827
curiosity -0.091 0.007 ** -0.110 0.001 ** -0.083 0.014 * -0.069 0.039 *
aesthetic -0.059 0.100 -0.065 0.072 -0.025 0.483 -0.022 0.541
imagination -0.074 0.007 ** -0.097 0.000 *** -0.077 0.007 ** -0.021 0.456

Effects mostly still significant but not always at the p < .001 level. Few effects still significant for self-concept clarity. Correlation is especially stongly reduced for neuroticism and its facets depression and anxiety.

Across all time points, using a mixed model:

Show the code
# prepare df
df_check_adjusted_all <- df_sbsa %>% 
  # reshape with well-being outcomes and current trait levels
  filter(rando!="Waitlist-Control") %>% 
  select(pid, rando, time,
         swls, meaning, selfes, concept,
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff")) %>% 
  pivot_longer(ends_with("_sqdiff"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  mutate(test = sub("_.*", "", test)) %>% 
  left_join(
    df_sbsa %>% 
    # reshape with squared differences -> add to previous
      filter(rando!="Waitlist-Control" & time==1) %>% 
      select(pid, rando, ends_with("_comb_curr")) %>% 
      pivot_longer(ends_with("_comb_curr"), 
                   names_to = "test", names_prefix = "facet", values_to = "initial", values_drop_na = TRUE) %>% 
      mutate(test = sub("_.*", "", test))
  )

# run models 
# swls
df_check_adjusted_swls_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ swls + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_swls_all_unlist <- as.data.frame(summary(df_check_adjusted_swls_all[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls_all[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_swls_all)) {
  df_check_adjusted_swls_all_unlist <- 
    bind_rows(df_check_adjusted_swls_all_unlist, 
              as.data.frame(summary(df_check_adjusted_swls_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls_all[[i]])$Std_Coefficient))
}
df_check_adjusted_swls_all_unlist <- df_check_adjusted_swls_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "swls", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# meaning
df_check_adjusted_meaning_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ meaning + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_meaning_all_unlist <- as.data.frame(summary(df_check_adjusted_meaning_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_meaning_all)) {
  df_check_adjusted_meaning_all_unlist <- 
    bind_rows(df_check_adjusted_meaning_all_unlist, 
              as.data.frame(summary(df_check_adjusted_meaning_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning_all[[i]])$Std_Coefficient))
}
df_check_adjusted_meaning_all_unlist <- df_check_adjusted_meaning_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "meaning", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# selfes
df_check_adjusted_selfes_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ selfes + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_selfes_all_unlist <- as.data.frame(summary(df_check_adjusted_selfes_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_selfes_all)) {
  df_check_adjusted_selfes_all_unlist <- 
    bind_rows(df_check_adjusted_selfes_all_unlist, 
              as.data.frame(summary(df_check_adjusted_selfes_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes_all[[i]])$Std_Coefficient))
}
df_check_adjusted_selfes_all_unlist <- df_check_adjusted_selfes_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "selfes", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# concept
df_check_adjusted_concept_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ concept + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_concept_all_unlist <- as.data.frame(summary(df_check_adjusted_concept_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_concept_all)) {
  df_check_adjusted_concept_all_unlist <- 
    bind_rows(df_check_adjusted_concept_all_unlist, 
              as.data.frame(summary(df_check_adjusted_concept_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept_all[[i]])$Std_Coefficient))
}
df_check_adjusted_concept_all_unlist <- df_check_adjusted_concept_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "concept", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

Does the relationship between the squared difference in one trait (current vs. ideal) and well-being aspects still hold if we control for the initial trait level?

Combine as one table:

kable(df_check_adjusted_swls_all_unlist %>% 
        filter(!term %in% c("Intercept", "initial")) %>% 
        select(outcome, d_swls = d, p_ls = p, sig_ls = sig) %>% 
        left_join(
          df_check_adjusted_meaning_all_unlist %>% 
            filter(!term %in% c("Intercept", "initial")) %>% 
            select(outcome, d_meaning = d, p_m = p, sig_m = sig)
        ) %>% 
          left_join(
            df_check_adjusted_selfes_all_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_selfes = d, p_se = p, sig_se = sig)
          ) %>% 
          left_join(
            df_check_adjusted_concept_all_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_concept = d, p_c = p, sig_c = sig)
          ), 
       digits = 3)
outcome d_swls p_ls sig_ls d_meaning p_m sig_m d_selfes p_se sig_se d_concept p_c sig_c
extraversion -0.215 0.000 *** -0.177 0.000 *** -0.246 0.000 *** -0.144 0.000 ***
agreeableness -0.135 0.000 *** -0.122 0.000 *** -0.166 0.000 *** -0.153 0.000 ***
conscientiousness -0.159 0.000 *** -0.142 0.000 *** -0.176 0.000 *** -0.127 0.000 ***
neuroticism -0.216 0.000 *** -0.183 0.000 *** -0.277 0.000 *** -0.139 0.000 ***
openness -0.122 0.000 *** -0.143 0.000 *** -0.151 0.000 *** -0.084 0.001 ***
sociability -0.235 0.000 *** -0.170 0.000 *** -0.216 0.000 *** -0.123 0.000 ***
assertiveness -0.148 0.000 *** -0.155 0.000 *** -0.165 0.000 *** -0.130 0.000 ***
energy -0.216 0.000 *** -0.155 0.000 *** -0.223 0.000 *** -0.137 0.000 ***
compassion -0.109 0.000 *** -0.091 0.001 *** -0.152 0.000 *** -0.135 0.000 ***
respectfulness -0.100 0.000 *** -0.094 0.000 *** -0.102 0.000 *** -0.138 0.000 ***
trust -0.130 0.000 *** -0.121 0.000 *** -0.167 0.000 *** -0.142 0.000 ***
organization -0.098 0.000 *** -0.110 0.000 *** -0.102 0.000 *** -0.102 0.000 ***
productiveness -0.159 0.000 *** -0.115 0.000 *** -0.172 0.000 *** -0.101 0.000 ***
responsibility -0.171 0.000 *** -0.116 0.000 *** -0.171 0.000 *** -0.116 0.000 ***
anxiety -0.175 0.000 *** -0.148 0.000 *** -0.198 0.000 *** -0.093 0.000 ***
depression -0.246 0.000 *** -0.202 0.000 *** -0.348 0.000 *** -0.143 0.000 ***
volatility -0.168 0.000 *** -0.150 0.000 *** -0.192 0.000 *** -0.139 0.000 ***
curiosity -0.089 0.001 *** -0.094 0.000 *** -0.092 0.000 *** -0.077 0.003 **
aesthetic -0.064 0.021 * -0.067 0.013 * -0.046 0.094 -0.050 0.068
imagination -0.101 0.000 *** -0.109 0.000 *** -0.128 0.000 *** -0.056 0.015 *

Almost all effects significant at the p < .001 level when we include all time points at once. Somewhat stronger effects for neuroticism and extraversion (and their facets).


6.2 H2: Well-being - latent change (H5 in paper)

Both groups will increase in all four psychological well-being indicators.

We will test the mean-level difference between baseline and follow up using a latent change model.

6.2.1 Life satisfaction

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_swls_hyp2 <- '
swls_t1 =~ 1*sw06_01_t1 + lamb2*sw06_02_t1 + lamb3*sw06_03_t1 + lamb4*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + lamb2*sw06_02_t2 + lamb3*sw06_03_t2 + lamb4*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ 1           # This estimates the intercept of the change score 
swls_t1 ~ 1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ res1*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ res2*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ res3*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ res4*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ res1*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ res2*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ res3*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ res4*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ m3*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ m4*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ m3*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ m4*1     # This estimates the intercept of X4 at T2
'
fit_mi_lcs_swls_hyp2 <- lavaan(mi_lcs_swls_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
714 19 14257.04 14343.89 0.991 0.04 0.029
# parameters of interest
params_lcs_swls_hyp2 <- broom::tidy(fit_mi_lcs_swls_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t2 ~ swls_t1", "d_swls_1 =~ swls_t2", "swls_t1 ~~ d_swls_1", # change parameters
                           "d_swls_1 ~1 ", "swls_t1 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t2 ~ swls_t1 1.000 1.000 1.000 0.936 NA NA
d_swls_1 =~ swls_t2 1.000 1.000 1.000 0.662 NA NA
d_swls_1 ~1 0.288 0.226 0.351 0.435 9.048 0
swls_t1 ~1 2.696 2.614 2.778 2.872 64.385 0
d_swls_1 ~~ d_swls_1 0.441 0.351 0.530 1.000 9.644 0
swls_t1 ~~ d_swls_1 -0.158 -0.217 -0.099 -0.253 -5.237 0

Plot model:

semPaths(fit_mi_lcs_swls_hyp2, what="est", 
         sizeLat = 7, sizeMan = 7, edge.label.cex = .75, intercepts = T, edge.color="black")

Significantly higher life satisfaction at the post test, b = 0.288, p = 0. Those with initially higher levels of life satisfaction (at T1) change to a lesser degree.

6.2.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_meaning_hyp2 <- '
meaning_t1 =~ 1*meaning_par1_t1 + lamb2*meaning_par2_t1 + lamb3*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + lamb2*meaning_par2_t2 + lamb3*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1              # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ 1              # This estimates the intercept of the change score 
meaning_t1 ~ 1               # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ res1*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ res2*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ res3*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ res1*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ res2*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ res3*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_meaning_hyp2 <- lavaan(mi_lcs_meaning_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
714 15 10454.07 10522.63 0.995 0.042 0.025
# parameters of interest
params_lcs_meaning_hyp2 <- broom::tidy(fit_mi_lcs_meaning_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t2 ~ meaning_t1", "d_meaning_1 =~ meaning_t2", "meaning_t1 ~~ d_meaning_1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t1 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances

kable(params_lcs_meaning_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t2 ~ meaning_t1 1.000 1.000 1.000 0.957 NA NA
d_meaning_1 =~ meaning_t2 1.000 1.000 1.000 0.843 NA NA
d_meaning_1 ~1 0.279 0.208 0.349 0.341 7.721 0
meaning_t1 ~1 3.216 3.133 3.299 3.467 76.110 0
d_meaning_1 ~~ d_meaning_1 0.668 0.524 0.813 1.000 9.046 0
meaning_t1 ~~ d_meaning_1 -0.295 -0.377 -0.213 -0.389 -7.027 0

Participants improved significantly in meaning in life across time, b = 0.279, p = 0.

6.2.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_selfes_hyp2 <- '
selfes_t1 =~ 1*selfes_par1_t1 + lamb2*selfes_par2_t1 + lamb3*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + lamb2*selfes_par2_t2 + lamb3*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1             # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ 1             # This estimates the intercept of the change score 
selfes_t1 ~ 1              # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ selfes_t1    # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ res1*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ res2*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ res3*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ res1*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ res2*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ res3*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_selfes_hyp2 <- lavaan(mi_lcs_selfes_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
714 15 7336.702 7405.265 1 0 0.009
# parameters of interest
params_lcs_selfes_hyp2 <- broom::tidy(fit_mi_lcs_selfes_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t2 ~ selfes_t1", "d_selfes_1 =~ selfes_t2", "selfes_t1 ~~ d_selfes_1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t1 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances

kable(params_lcs_selfes_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t2 ~ selfes_t1 1.000 1.000 1.000 0.993 NA NA
d_selfes_1 =~ selfes_t2 1.000 1.000 1.000 0.720 NA NA
d_selfes_1 ~1 0.285 0.238 0.332 0.520 11.953 0
selfes_t1 ~1 3.127 3.065 3.190 4.138 97.548 0
d_selfes_1 ~~ d_selfes_1 0.300 0.244 0.357 1.000 10.402 0
selfes_t1 ~~ d_selfes_1 -0.146 -0.186 -0.106 -0.352 -7.150 0

Participants increased significantly in self-esteem between the two assessments, b = 0.285, p = 0.

6.2.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_concept_hyp2 <- '
concept_t1 =~ 1*concept_par1_t1 + lamb2*concept_par2_t1 + lamb3*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + lamb2*concept_par2_t2 + lamb3*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1              # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ 1              # This estimates the intercept of the change score 
concept_t1 ~ 1               # This estimates the intercept of concept_t1 
d_concept_1 ~~ d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ concept_t1    # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ res1*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ res2*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ res3*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ res1*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ res2*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ res3*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_concept_hyp2 <- lavaan(mi_lcs_concept_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
714 15 8360.688 8429.252 0.998 0.023 0.022
# parameters of interest
params_lcs_concept_hyp2 <- broom::tidy(fit_mi_lcs_concept_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t2 ~ concept_t1", "d_concept_1 =~ concept_t2", "concept_t1 ~~ d_concept_1", # change parameters
                           "d_concept_1 ~1 ", "concept_t1 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances

kable(params_lcs_concept_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t2 ~ concept_t1 1.000 1.000 1.000 0.960 NA NA
d_concept_1 =~ concept_t2 1.000 1.000 1.000 0.825 NA NA
d_concept_1 ~1 0.202 0.154 0.250 0.360 8.188 0
concept_t1 ~1 2.928 2.871 2.986 4.483 99.444 0
d_concept_1 ~~ d_concept_1 0.315 0.253 0.377 1.000 9.927 0
concept_t1 ~~ d_concept_1 -0.139 -0.176 -0.103 -0.380 -7.512 0

Self concept clarity improved significantly across time, b = 0.202, p = 0.


6.3 H3: Distance between ideal- and current-self over time (H1 in paper)

The distance between ideal- and current-self will decrease in both groups.

We will use two strategies to test this hypothesis. First, we will compute the Fisher z-transformed profile correlation between current- and ideal-self and test whether it increased across assessments. Second, we will test whether the squared difference between current- and ideal-self ratings for each Big Five trait decreased across assessments. We will test mean-level differences in profile correlations and squared differences between baseline and follow up using repeated-measures t-test.

6.3.1 Profile similarity

Reshape to wide:

Show the code
# reshape to wide
df_sbsa_wide_profdiff <- df_sbsa %>% 
  arrange(pid, time) %>% 
  select(pid, time, profile_corr_item_z, profile_corr_facet_z, ends_with("_sqdiff")) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = -c(pid, time))

Checking assumptions

# item-level profile correlation
shapiro.test(df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1
W = 0.92573, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1
D = 0.088592, p-value = 2.99e-13
# descriptives
psych::describe(df_sbsa_wide_profdiff$profile_corr_item_z_t1)
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 704 0.37 0.47   0.36    0.35 0.45 -1.05 2.25   3.3 0.49     0.88 0.02
psych::describe(df_sbsa_wide_profdiff$profile_corr_item_z_t2)
   vars   n mean   sd median trimmed mad  min  max range skew kurtosis   se
X1    1 664 0.55 0.53   0.51    0.53 0.5 -0.9 3.32  4.22 0.71     2.48 0.02
# facet-level profile correlation
shapiro.test(df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1
W = 0.94494, p-value = 7.556e-15
lillie.test(df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1
D = 0.076821, p-value = 8.307e-10
# descriptives
psych::describe(df_sbsa_wide_profdiff$profile_corr_facet_z_t1)
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 704 0.28 0.65   0.22    0.25 0.64 -1.5 2.67  4.17  0.5     0.51 0.02
psych::describe(df_sbsa_wide_profdiff$profile_corr_facet_z_t2)
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 664  0.5 0.73   0.47    0.48 0.73 -1.22 3.73  4.96 0.46     0.78 0.03

Results summary:

t_profile_corr_item <- t.test(df_sbsa_wide_profdiff$profile_corr_item_z_t2, df_sbsa_wide_profdiff$profile_corr_item_z_t1, paired = TRUE)
t_profile_corr_facet <- t.test(df_sbsa_wide_profdiff$profile_corr_facet_z_t2, df_sbsa_wide_profdiff$profile_corr_facet_z_t1, paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item), tidy(t_profile_corr_facet)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 3)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.181 11.457 0 652 0.150 0.212 Paired t-test two.sided
Facet-level profile corr. 0.227 10.775 0 652 0.186 0.268 Paired t-test two.sided
# effect sizes
d_profile_corr_item <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa)
d_profile_corr_item$cohen.d
                        lower    effect     upper
profile_corr_item_z 0.2563996 0.3633649 0.4701992
d_profile_corr_facet <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa)
d_profile_corr_facet$cohen.d
                        lower    effect    upper
profile_corr_facet_z 0.221792 0.3285939 0.435276

Plot

profile_df_plot <- df_sbsa %>% select(pid, time, profile_corr_item_z, profile_corr_facet_z) %>% 
  pivot_longer(-c(pid, time), names_to = "itemfacet", values_to = "corr") %>% 
  mutate(itemfacet2 = fct_recode(itemfacet, "Item-level" = "profile_corr_item_z", "Facet-level" = "profile_corr_facet_z"),
         itemfacet2 = fct_reorder(itemfacet2, corr, .desc = F))

ggplot(profile_df_plot) + 
  aes(x = as.factor(time), y = corr) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  facet_wrap(vars(itemfacet2)) +
  labs(x = "Measurement Occasion", y = "Profile correlation", 
       title = "H3: Distance between ideal- and current-self") + 
  theme_bw()

Significantly higher profile correlations at the second measurement occasion, both for the item-level profile correlation and the facet-level profile correlations.

6.3.2 Individual traits: squared differences

Checking assumptions

# extra
shapiro.test(df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1
W = 0.869, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1
D = 0.15365, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$extra_sqdiff_t1)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 704 1.85 2.05   1.17    1.47 1.48   0 11.11 11.11 1.76     3.26 0.08
psych::describe(df_sbsa_wide_profdiff$extra_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 664 1.34 1.62   0.77    1.01 0.88   0 10.56 10.56 2.03     4.65 0.06
# agree
shapiro.test(df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1
W = 0.77856, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1
D = 0.19487, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$agree_sqdiff_t1)
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 704 0.55 0.91   0.25    0.35 0.33   0 8.03  8.03 3.75    19.28 0.03
psych::describe(df_sbsa_wide_profdiff$agree_sqdiff_t2)
   vars   n mean   sd median trimmed mad min   max range skew kurtosis   se
X1    1 664  0.4 0.74   0.14    0.24 0.2   0 10.03 10.03  5.7     54.3 0.03
# consc
shapiro.test(df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1
W = 0.83389, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1
D = 0.15295, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$consc_sqdiff_t1)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 704 1.71 2.08      1    1.32 1.32   0 14.06 14.06 2.23     6.73 0.08
psych::describe(df_sbsa_wide_profdiff$consc_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 664 1.37 1.78   0.69    1.02 0.99   0 14.69 14.69 2.68    10.82 0.07
# neuro
shapiro.test(df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1
W = 0.91045, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1
D = 0.11858, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$neuro_sqdiff_t1)
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 704 3.29 3.41   2.25    2.72 2.68   0  16    16  1.4      1.5 0.13
psych::describe(df_sbsa_wide_profdiff$neuro_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 664 2.67 3.09   1.56    2.07 1.95   0 15.34 15.34 1.74     2.78 0.12
# openn
shapiro.test(df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1
W = 0.80041, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1
D = 0.19929, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$openn_sqdiff_t1)
   vars   n mean  sd median trimmed  mad min  max range skew kurtosis   se
X1    1 704 0.48 0.8   0.17    0.29 0.25   0 5.84  5.84 2.96    10.71 0.03
psych::describe(df_sbsa_wide_profdiff$openn_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 664 0.37 0.61   0.11    0.23 0.15   0 4.34  4.34 3.05    11.98 0.02

Results summary:

mod_traits_sqdiff <- df_sbsa_wide_profdiff %>% 
  select(-starts_with("profile")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t1|t2)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ relevel(as.factor(time), "t2"), # need to relevel this to get T2-T1 diff (not sure why)
                                     data = .x, paired = TRUE))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_unlist <- mod_traits_sqdiff[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff)) {
  mod_traits_unlist <- bind_rows(mod_traits_unlist, mod_traits_sqdiff[[i]] %>% tidy())
}

kable(mod_traits_unlist %>% mutate(outcome = sort(names(b5_vars))) %>% 
        select(outcome, everything()) %>% arrange(factor(outcome, levels = (names(b5_vars)))), digits = 3) # order by BFI traits
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion -0.504 -7.743 0.000 652 -0.632 -0.376 Paired t-test two.sided
agreeableness -0.161 -5.348 0.000 652 -0.220 -0.102 Paired t-test two.sided
conscientiousness -0.323 -5.037 0.000 652 -0.448 -0.197 Paired t-test two.sided
neuroticism -0.672 -7.043 0.000 652 -0.860 -0.485 Paired t-test two.sided
openness -0.118 -4.269 0.000 652 -0.173 -0.064 Paired t-test two.sided
sociability -0.814 -8.158 0.000 652 -1.010 -0.618 Paired t-test two.sided
assertiveness -0.491 -5.652 0.000 652 -0.661 -0.320 Paired t-test two.sided
energy -0.490 -5.238 0.000 652 -0.674 -0.307 Paired t-test two.sided
compassion -0.150 -3.933 0.000 652 -0.225 -0.075 Paired t-test two.sided
respectfulness -0.165 -3.930 0.000 652 -0.247 -0.082 Paired t-test two.sided
trust -0.354 -5.091 0.000 652 -0.490 -0.217 Paired t-test two.sided
organization -0.374 -4.056 0.000 652 -0.556 -0.193 Paired t-test two.sided
productiveness -0.529 -5.388 0.000 652 -0.722 -0.336 Paired t-test two.sided
responsibility -0.245 -3.659 0.000 652 -0.377 -0.114 Paired t-test two.sided
anxiety -0.699 -4.979 0.000 652 -0.975 -0.423 Paired t-test two.sided
depression -0.901 -7.331 0.000 652 -1.143 -0.660 Paired t-test two.sided
volatility -0.617 -5.618 0.000 652 -0.833 -0.402 Paired t-test two.sided
curiosity -0.156 -3.434 0.001 652 -0.245 -0.067 Paired t-test two.sided
aesthetic -0.129 -2.877 0.004 652 -0.216 -0.041 Paired t-test two.sided
imagination -0.238 -3.573 0.000 652 -0.369 -0.107 Paired t-test two.sided
# effect sizes
cohend_cust = function(outcome, df) {
  form = as.formula(paste0(outcome, " ~ time"))
  psych::cohen.d(form, data = df)
}

d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), df_sbsa)
d_traits_unlist <- as_tibble(d_trait$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), df_sbsa)
  d_traits_unlist <- bind_rows(d_traits_unlist, as_tibble(d_trait$cohen.d))
}
kable(d_traits_unlist %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.380 -0.274 -0.167
agreeableness -0.289 -0.183 -0.077
conscientiousness -0.282 -0.176 -0.069
neuroticism -0.298 -0.192 -0.085
openness -0.269 -0.163 -0.056
sociability -0.375 -0.268 -0.162
assertiveness -0.320 -0.214 -0.108
energy -0.324 -0.217 -0.111
compassion -0.272 -0.166 -0.060
respectfulness -0.251 -0.145 -0.039
trust -0.301 -0.195 -0.089
organization -0.267 -0.160 -0.054
productiveness -0.290 -0.184 -0.077
responsibility -0.244 -0.138 -0.031
anxiety -0.258 -0.151 -0.045
depression -0.339 -0.233 -0.127
volatility -0.275 -0.169 -0.063
curiosity -0.251 -0.145 -0.039
aesthetic -0.258 -0.152 -0.046
imagination -0.224 -0.118 -0.012

Significantly lower squared mean-level differences at the second measurement occasion, both for the Big Five traits and the 15 BFI-2 facets.

Plot (traits/facets sorted by average size of squared differences)

sqdiff_df_plot <- df_sbsa %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff <- ggplot(sqdiff_df_plot) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

For some of the facets, the distribution look very similar and differences over time are perhaps driven by outliers.


6.4 H4: Change goals and change in personality (current / ideal) in self-improvement group

In the self-improvement group, there will be a correlation between change goals and change in current-self ratings but not change in ideal-self ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level differences across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sb <- df_sbsa %>% 
  filter(rando=="Self-Improvement") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07")), # facet-specific change goals
         sb06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sb07"), sb06_01)) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, sb06_01_t2))
# colnames(df_sbsa_wide_pers_sb)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sb <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Improvement") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sb)

6.4.1 Big Five traits

6.4.1.1 Extraversion - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~~ extra_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp4 <- lavaan(mi_lcs_extra_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4746.072 4816.418 0.983 0.058 0.081
# parameters of interest
params_lcs_extra_curr_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                     "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.985 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.590 NA NA
d_extra_1 ~1 0.134 0.085 0.182 0.388 5.431 0.000
extra_t1 ~1 2.756 2.684 2.827 4.790 75.483 0.000
d_extra_1 ~~ d_extra_1 0.119 0.073 0.165 1.000 5.033 0.000
extra_t1 ~~ d_extra_1 -0.054 -0.086 -0.023 -0.274 -3.366 0.001
d_extra_1 ~~ sb06_01_t1 0.064 0.012 0.116 0.187 2.423 0.015
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.193 0.000
sb06_01_t1 ~1 3.112 3.009 3.215 3.144 59.268 0.000

The correlation of the general change goal with the extraversion change score (current-self) is significantly different from zero, r = 0.187, p = 0.015.

6.4.1.2 Extraversion - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~~ extra_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp4 <- lavaan(mi_lcs_extra_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4427.684 4498.029 0.993 0.027 0.036
# parameters of interest
params_lcs_extra_ideal_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.942 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.594 NA NA
d_extra_1 ~1 -0.029 -0.079 0.022 -0.095 -1.104 0.270
extra_t1 ~1 3.717 3.653 3.781 7.822 114.026 0.000
d_extra_1 ~~ d_extra_1 0.090 0.042 0.138 1.000 3.685 0.000
extra_t1 ~~ d_extra_1 -0.031 -0.066 0.005 -0.214 -1.691 0.091
d_extra_1 ~~ sb06_01_t1 0.060 0.008 0.113 0.203 2.245 0.025
sb06_01_t1 ~~ sb06_01_t1 0.979 0.844 1.115 1.000 14.197 0.000
sb06_01_t1 ~1 3.109 3.007 3.212 3.142 59.314 0.000

Correlation of general change goal with extraversion change score (ideal-self) is significantly different from zero, r = 0.203, p = 0.025.

6.4.1.3 Extraversion - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~~ extra_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp4 <- lavaan(mi_lcs_extra_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 7117.032 7214.734 0.942 0.086 0.124
# parameters of interest
params_lcs_extra_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.997 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.603 NA NA
d_extra_1 ~1 0.133 0.085 0.181 0.383 5.435 0.000
extra_t1 ~1 2.756 2.684 2.827 4.798 75.531 0.000
d_extra_1 ~~ d_extra_1 0.121 0.074 0.167 1.000 5.077 0.000
extra_t1 ~~ d_extra_1 -0.059 -0.092 -0.027 -0.298 -3.598 0.000
goals ~~ d_extra_1 0.010 -0.031 0.050 0.048 0.458 0.647
goals ~~ goals 0.330 0.082 0.578 1.000 2.604 0.009

Correlation of specific, facet-level change goals with extraversion change score (current-self) is not significantly different from zero, r = 0.048, p = 0.647.

6.4.1.4 Extraversion - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~~ extra_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp4 <- lavaan(mi_lcs_extra_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6795.588 6893.29 0.949 0.061 0.085
# parameters of interest
params_lcs_extra_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.945 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.600 NA NA
d_extra_1 ~1 -0.029 -0.080 0.021 -0.098 -1.138 0.255
extra_t1 ~1 3.717 3.653 3.781 7.849 114.077 0.000
d_extra_1 ~~ d_extra_1 0.090 0.041 0.140 1.000 3.598 0.000
extra_t1 ~~ d_extra_1 -0.032 -0.069 0.006 -0.223 -1.665 0.096
goals ~~ d_extra_1 0.032 -0.034 0.098 0.173 0.948 0.343
goals ~~ goals 0.377 0.077 0.676 1.000 2.463 0.014

Correlation of specific, facet-level change goals with extraversion change score (ideal-self) is not significantly different from zero, r = 0.173, p = 0.343.

6.4.1.5 Agreeableness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~~ agree_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp4 <- lavaan(mi_lcs_agree_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4214.426 4284.771 0.99 0.037 0.035
# parameters of interest
params_lcs_agree_curr_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                     "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.062 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA
d_agree_1 ~1 0.076 0.039 0.114 0.356 3.968 0.000
agree_t1 ~1 3.357 3.295 3.418 7.983 107.627 0.000
d_agree_1 ~~ d_agree_1 0.046 0.022 0.069 1.000 3.847 0.000
agree_t1 ~~ d_agree_1 -0.033 -0.050 -0.016 -0.365 -3.719 0.000
d_agree_1 ~~ sb06_01_t1 -0.014 -0.046 0.019 -0.064 -0.805 0.421
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.193 0.000
sb06_01_t1 ~1 3.109 3.006 3.212 3.142 59.219 0.000

Correlation of general change goal with agreeableness change score (current-self) is not significantly different from zero, r = -0.064, p = 0.421.

6.4.1.6 Agreeableness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~~ agree_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp4 <- lavaan(mi_lcs_agree_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4315.977 4386.323 0.999 0.012 0.031
# parameters of interest
params_lcs_agree_ideal_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.042 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.695 NA NA
d_agree_1 ~1 0.032 -0.007 0.070 0.114 1.617 0.106
agree_t1 ~1 3.710 3.643 3.777 8.891 108.194 0.000
d_agree_1 ~~ d_agree_1 0.077 0.040 0.115 1.000 4.079 0.000
agree_t1 ~~ d_agree_1 -0.046 -0.072 -0.019 -0.392 -3.336 0.001
d_agree_1 ~~ sb06_01_t1 0.016 -0.026 0.058 0.058 0.742 0.458
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.191 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.191 0.000

Correlation of general change goal with agreeableness change score (ideal-self) is not significantly different from zero, r = 0.058, p = 0.458.

6.4.1.7 Agreeableness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~~ agree_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp4 <- lavaan(mi_lcs_agree_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6728.588 6826.29 0.964 0.061 0.078
# parameters of interest
params_lcs_agree_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.059 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.537 NA NA
d_agree_1 ~1 0.076 0.039 0.114 0.357 3.974 0.000
agree_t1 ~1 3.357 3.295 3.418 7.972 107.605 0.000
d_agree_1 ~~ d_agree_1 0.046 0.023 0.069 1.000 3.900 0.000
agree_t1 ~~ d_agree_1 -0.032 -0.049 -0.015 -0.360 -3.720 0.000
goals ~~ d_agree_1 0.005 -0.030 0.041 0.028 0.303 0.762
goals ~~ goals 0.825 0.522 1.129 1.000 5.327 0.000

Correlation of specific, facet-level change goals with agreeableness change score (current-self) is not significantly different from zero, r = 0.028, p = 0.762.

6.4.1.8 Agreeableness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~~ agree_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp4 <- lavaan(mi_lcs_agree_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6828.144 6925.846 0.995 0.022 0.035
# parameters of interest
params_lcs_agree_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.042 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.695 NA NA
d_agree_1 ~1 0.032 -0.006 0.070 0.115 1.640 0.101
agree_t1 ~1 3.710 3.642 3.777 8.869 108.172 0.000
d_agree_1 ~~ d_agree_1 0.078 0.040 0.115 1.000 4.080 0.000
agree_t1 ~~ d_agree_1 -0.046 -0.073 -0.019 -0.393 -3.352 0.001
goals ~~ d_agree_1 -0.028 -0.069 0.012 -0.113 -1.368 0.171
goals ~~ goals 0.819 0.507 1.131 1.000 5.143 0.000

Correlation of specific, facet-level change goals with agreeableness change score (ideal-self) is not significantly different from zero, r = -0.113, p = 0.171.

6.4.1.9 Conscientiousness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp4 <- lavaan(mi_lcs_consc_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4446.456 4516.801 0.991 0.049 0.064
# parameters of interest
params_lcs_consc_curr_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                     "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.036 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.505 NA NA
d_consc_1 ~1 0.124 0.075 0.173 0.342 4.949 0.000
consc_t1 ~1 3.552 3.468 3.635 4.793 83.287 0.000
d_consc_1 ~~ d_consc_1 0.131 0.087 0.175 1.000 5.839 0.000
consc_t1 ~~ d_consc_1 -0.084 -0.125 -0.043 -0.313 -3.979 0.000
d_consc_1 ~~ sb06_01_t1 0.007 -0.039 0.054 0.021 0.311 0.756
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.268 0.000

Correlation of general change goal with conscientiousness change score (current-self) is not significantly different from zero, r = 0.021, p = 0.756.

6.4.1.10 Conscientiousness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp4 <- lavaan(mi_lcs_consc_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 3789.358 3859.704 0.998 0.018 0.026
# parameters of interest
params_lcs_consc_ideal_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.085 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.781 NA NA
d_consc_1 ~1 0.024 -0.023 0.071 0.071 0.997 0.319
consc_t1 ~1 4.370 4.314 4.426 9.388 153.707 0.000
d_consc_1 ~~ d_consc_1 0.112 0.059 0.166 1.000 4.121 0.000
consc_t1 ~~ d_consc_1 -0.073 -0.114 -0.031 -0.465 -3.405 0.001
d_consc_1 ~~ sb06_01_t1 0.010 -0.036 0.057 0.032 0.444 0.657
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.237 0.000

Correlation of general change goal with conscientiousness change score (ideal-self) is not significantly different from zero, r = 0.032, p = 0.657.

6.4.1.11 Conscientiousness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp4 <- lavaan(mi_lcs_consc_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6888.664 6986.366 0.934 0.115 0.205
# parameters of interest
params_lcs_consc_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.051 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.520 NA NA
d_consc_1 ~1 0.124 0.075 0.173 0.338 4.970 0.000
consc_t1 ~1 3.552 3.468 3.635 4.795 83.301 0.000
d_consc_1 ~~ d_consc_1 0.135 0.088 0.182 1.000 5.617 0.000
consc_t1 ~~ d_consc_1 -0.093 -0.141 -0.046 -0.343 -3.830 0.000
goals ~~ d_consc_1 -0.028 -0.095 0.038 -0.068 -0.832 0.405
goals ~~ goals 1.277 0.977 1.577 1.000 8.341 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (current-self) is not significantly different from zero, r = -0.068, p = 0.405.

6.4.1.12 Conscientiousness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp4 <- lavaan(mi_lcs_consc_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6232.302 6330.004 1 0 0.024
# parameters of interest
params_lcs_consc_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.085 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.781 NA NA
d_consc_1 ~1 0.024 -0.023 0.071 0.071 0.996 0.319
consc_t1 ~1 4.370 4.314 4.426 9.389 153.709 0.000
d_consc_1 ~~ d_consc_1 0.112 0.059 0.166 1.000 4.121 0.000
consc_t1 ~~ d_consc_1 -0.072 -0.114 -0.031 -0.465 -3.402 0.001
goals ~~ d_consc_1 -0.009 -0.060 0.042 -0.024 -0.343 0.732
goals ~~ goals 1.276 0.976 1.575 1.000 8.349 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (ideal-self) is not significantly different from zero, r = -0.024, p = 0.732.

6.4.1.13 Neuroticism - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp4 <- lavaan(mi_lcs_neuro_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4916.888 4987.233 0.984 0.067 0.09
# parameters of interest
params_lcs_neuro_curr_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                     "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.018 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.617 NA NA
d_neuro_1 ~1 -0.211 -0.272 -0.150 -0.433 -6.735 0.00
neuro_t1 ~1 3.491 3.399 3.582 4.350 74.590 0.00
d_neuro_1 ~~ d_neuro_1 0.237 0.166 0.308 1.000 6.522 0.00
neuro_t1 ~~ d_neuro_1 -0.130 -0.184 -0.075 -0.332 -4.655 0.00
d_neuro_1 ~~ sb06_01_t1 -0.045 -0.102 0.013 -0.092 -1.514 0.13
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.00
sb06_01_t1 ~1 3.111 3.008 3.213 3.143 59.351 0.00

Correlation of general change goal with neuroticism change score (current-self) is not significantly different from zero, r = -0.092, p = 0.13.

6.4.1.14 Neuroticism - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp4 <- lavaan(mi_lcs_neuro_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 3943.146 4013.492 0.991 0.037 0.037
# parameters of interest
params_lcs_neuro_ideal_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.050 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.775 NA NA
d_neuro_1 ~1 -0.042 -0.086 0.002 -0.127 -1.866 0.062
neuro_t1 ~1 1.657 1.601 1.713 3.724 58.132 0.000
d_neuro_1 ~~ d_neuro_1 0.108 0.068 0.148 1.000 5.269 0.000
neuro_t1 ~~ d_neuro_1 -0.063 -0.096 -0.031 -0.432 -3.791 0.000
d_neuro_1 ~~ sb06_01_t1 -0.029 -0.074 0.016 -0.090 -1.267 0.205
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.194 0.000
sb06_01_t1 ~1 3.110 3.008 3.213 3.143 59.261 0.000

Correlation of general change goal with neuroticism change score (ideal-self) is not significantly different from zero, r = -0.09, p = 0.205.

6.4.1.15 Neuroticism - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp4 <- lavaan(mi_lcs_neuro_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 7479.426 7577.128 0.929 0.12 0.207
# parameters of interest
params_lcs_neuro_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.087 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.706 NA NA
d_neuro_1 ~1 -0.209 -0.270 -0.147 -0.402 -6.680 0.00
neuro_t1 ~1 3.490 3.399 3.582 4.368 74.608 0.00
d_neuro_1 ~~ d_neuro_1 0.269 0.180 0.358 1.000 5.926 0.00
neuro_t1 ~~ d_neuro_1 -0.184 -0.254 -0.113 -0.443 -5.124 0.00
goals ~~ d_neuro_1 0.121 0.030 0.213 0.213 2.591 0.01
goals ~~ goals 1.207 0.881 1.532 1.000 7.264 0.00

The correlation of specific, facet-level change goals with neuroticism change score (current-self) is significantly different from zero, r = 0.213, p = 0.01.

6.4.1.16 Neuroticism - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp4 <- lavaan(mi_lcs_neuro_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6514.105 6611.807 0.987 0.039 0.031
# parameters of interest
params_lcs_neuro_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.048 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.773 NA NA
d_neuro_1 ~1 -0.042 -0.086 0.002 -0.127 -1.862 0.063
neuro_t1 ~1 1.657 1.601 1.713 3.730 58.144 0.000
d_neuro_1 ~~ d_neuro_1 0.107 0.068 0.147 1.000 5.302 0.000
neuro_t1 ~~ d_neuro_1 -0.062 -0.095 -0.030 -0.429 -3.776 0.000
goals ~~ d_neuro_1 0.002 -0.045 0.049 0.006 0.083 0.934
goals ~~ goals 1.222 0.897 1.548 1.000 7.363 0.000

Correlation of specific, facet-level change goals with neuroticism change score (ideal-self) is not significantly different from zero, r = 0.006, p = 0.934.

6.4.1.17 Openness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp4 <- lavaan(mi_lcs_openn_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4532.571 4602.916 0.994 0.034 0.022
# parameters of interest
params_lcs_openn_curr_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                     "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.912 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.410 NA NA
d_openn_1 ~1 0.057 0.021 0.093 0.292 3.139 0.002
openn_t1 ~1 3.435 3.367 3.503 7.894 98.490 0.000
d_openn_1 ~~ d_openn_1 0.038 0.018 0.059 1.000 3.615 0.000
openn_t1 ~~ d_openn_1 0.000 -0.016 0.015 -0.001 -0.009 0.993
d_openn_1 ~~ sb06_01_t1 -0.013 -0.049 0.023 -0.068 -0.717 0.474
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.188 0.000
sb06_01_t1 ~1 3.109 3.006 3.212 3.141 59.187 0.000

Correlation of general change goal with openness change score (current-self) is not significantly different from zero, r = -0.068, p = 0.474.

6.4.1.18 Openness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp4 <- lavaan(mi_lcs_openn_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4523.142 4593.488 0.996 0.022 0.041
# parameters of interest
params_lcs_openn_ideal_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.012 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.644 NA NA
d_openn_1 ~1 0.003 -0.037 0.043 0.013 0.157 0.875
openn_t1 ~1 3.739 3.676 3.801 9.491 117.327 0.000
d_openn_1 ~~ d_openn_1 0.063 0.026 0.099 1.000 3.350 0.001
openn_t1 ~~ d_openn_1 -0.033 -0.060 -0.006 -0.337 -2.425 0.015
d_openn_1 ~~ sb06_01_t1 -0.014 -0.059 0.031 -0.058 -0.622 0.534
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.200 0.000
sb06_01_t1 ~1 3.109 3.007 3.212 3.141 59.256 0.000

Correlation of general change goal with openness change score (ideal-self) is not significantly different from zero, r = -0.058, p = 0.534.

6.4.1.19 Openness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp4 <- lavaan(mi_lcs_openn_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6833.739 6931.441 0.96 0.075 0.107
# parameters of interest
params_lcs_openn_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.899 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.400 NA NA
d_openn_1 ~1 0.057 0.022 0.093 0.298 3.177 0.001
openn_t1 ~1 3.435 3.367 3.503 7.931 98.528 0.000
d_openn_1 ~~ d_openn_1 0.037 0.017 0.057 1.000 3.581 0.000
openn_t1 ~~ d_openn_1 0.004 -0.012 0.019 0.046 0.478 0.633
goals ~~ d_openn_1 0.026 0.003 0.049 0.225 2.242 0.025
goals ~~ goals 0.364 0.207 0.521 1.000 4.541 0.000

The correlation of specific, facet-level change goals with openness change score (current-self) is significantly different from zero, r = 0.225, p = 0.025.

6.4.1.20 Openness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp4 <- lavaan(mi_lcs_openn_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6826.928 6924.63 0.99 0.031 0.047
# parameters of interest
params_lcs_openn_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.017 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.649 NA NA
d_openn_1 ~1 0.004 -0.036 0.044 0.015 0.180 0.857
openn_t1 ~1 3.739 3.676 3.801 9.452 117.348 0.000
d_openn_1 ~~ d_openn_1 0.064 0.027 0.101 1.000 3.405 0.001
openn_t1 ~~ d_openn_1 -0.034 -0.060 -0.009 -0.345 -2.611 0.009
goals ~~ d_openn_1 0.020 -0.008 0.048 0.129 1.386 0.166
goals ~~ goals 0.365 0.208 0.521 1.000 4.570 0.000

Correlation of specific, facet-level change goals with openness change score (ideal-self) is not significantly different from zero, r = 0.129, p = 0.166.

6.4.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with change goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sb06_01_t1 & sb07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sb06_01_t1"
      } else{
        goal_op = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), facet_model_fit))
      }
    }
  }
}  
6.4.2.1 Sociability - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8681.358 8767.336 0.944 0.078 0.061
# parameters of interest
params_lcs_socia_curr_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.017 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.633 NA NA
d_socia_1 ~1 0.180 0.094 0.267 0.345 4.095 0.000
socia_t1 ~1 2.805 2.681 2.929 3.344 44.338 0.000
d_socia_1 ~~ d_socia_1 0.273 0.163 0.383 1.000 4.861 0.000
socia_t1 ~~ d_socia_1 -0.148 -0.227 -0.068 -0.337 -3.637 0.000
d_socia_1 ~~ sb06_01_t1 0.088 0.008 0.167 0.170 2.159 0.031
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.190 0.000
sb06_01_t1 ~1 3.111 3.008 3.214 3.143 59.260 0.000

The correlation of the general change goal with the sociability change score (current-self) is significantly different from zero, r = 0.17, p = 0.031.

6.4.2.2 Sociability - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8440.681 8526.659 0.972 0.041 0.05
# parameters of interest
params_lcs_socia_ideal_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.968 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.495 NA NA
d_socia_1 ~1 -0.035 -0.088 0.017 -0.151 -1.315 0.188
socia_t1 ~1 4.186 4.105 4.266 9.094 102.508 0.000
d_socia_1 ~~ d_socia_1 0.055 0.001 0.110 1.000 1.985 0.047
socia_t1 ~~ d_socia_1 -0.021 -0.053 0.012 -0.189 -1.254 0.210
d_socia_1 ~~ sb06_01_t1 0.047 -0.006 0.101 0.203 1.727 0.084
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.109 3.006 3.212 3.141 59.290 0.000

Correlation of general change goal with sociability change score (ideal-self) is not significantly different from zero, r = 0.203, p = 0.084.

6.4.2.3 Sociability - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8826.141 8912.119 0.904 0.104 0.116
# parameters of interest
params_lcs_socia_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.044 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.667 NA NA
d_socia_1 ~1 0.178 0.092 0.264 0.334 4.058 0.000
socia_t1 ~1 2.806 2.682 2.930 3.367 44.398 0.000
d_socia_1 ~~ d_socia_1 0.284 0.168 0.400 1.000 4.792 0.000
socia_t1 ~~ d_socia_1 -0.170 -0.257 -0.083 -0.383 -3.836 0.000
d_socia_1 ~~ sb07_01_t1 -0.045 -0.137 0.046 -0.071 -0.970 0.332
sb07_01_t1 ~~ sb07_01_t1 1.450 1.260 1.641 1.000 14.932 0.000

Correlation of specific, facet-level change goals with sociability change score (current-self) is not significantly different from zero, r = -0.071, p = 0.332.

6.4.2.4 Sociability - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8579.207 8665.184 0.948 0.057 0.07
# parameters of interest
params_lcs_socia_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.981 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.518 NA NA
d_socia_1 ~1 -0.037 -0.090 0.015 -0.154 -1.388 0.165
socia_t1 ~1 4.186 4.106 4.266 9.134 102.513 0.000
d_socia_1 ~~ d_socia_1 0.059 0.003 0.114 1.000 2.072 0.038
socia_t1 ~~ d_socia_1 -0.025 -0.058 0.008 -0.226 -1.479 0.139
d_socia_1 ~~ sb07_01_t1 0.067 0.005 0.130 0.231 2.111 0.035
sb07_01_t1 ~~ sb07_01_t1 1.450 1.260 1.641 1.000 14.929 0.000

The correlation of specific, facet-level change goals with the anxiety change score (ideal-self) is (barely) significantly different from zero, r = 0.231, p = 0.035.

6.4.2.5 Assertiveness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8998.591 9084.569 0.983 0.035 0.052
# parameters of interest
params_lcs_asser_curr_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.987 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.416 NA NA
d_asser_1 ~1 0.056 0.003 0.108 0.232 2.072 0.038
asser_t1 ~1 3.059 2.958 3.161 5.366 59.026 0.000
d_asser_1 ~~ d_asser_1 0.058 0.008 0.107 1.000 2.271 0.023
asser_t1 ~~ d_asser_1 -0.025 -0.061 0.012 -0.180 -1.313 0.189
d_asser_1 ~~ sb06_01_t1 0.034 -0.025 0.093 0.144 1.136 0.256
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.008 3.213 3.143 59.300 0.000

Correlation of general change goal with assertiveness change score (current-self) is not significantly different from zero, r = 0.144, p = 0.256.

6.4.2.6 Assertiveness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8821.067 8907.045 1 0 0.036
# parameters of interest
params_lcs_asser_ideal_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.931 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.634 NA NA
d_asser_1 ~1 -0.033 -0.071 0.005 -0.158 -1.706 0.088
asser_t1 ~1 4.068 3.983 4.153 13.263 93.642 0.000
d_asser_1 ~~ d_asser_1 0.044 0.004 0.084 1.000 2.140 0.032
asser_t1 ~~ d_asser_1 -0.015 -0.035 0.006 -0.228 -1.411 0.158
d_asser_1 ~~ sb06_01_t1 0.050 0.009 0.091 0.241 2.400 0.016
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.191 0.000
sb06_01_t1 ~1 3.109 3.007 3.212 3.142 59.293 0.000

Correlation of general change goal with assertiveness change score (ideal-self) is significantly different from zero, r = 0.241, p = 0.016.

6.4.2.7 Assertiveness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9113.289 9199.267 0.959 0.055 0.07
# parameters of interest
params_lcs_asser_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.990 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.420 NA NA
d_asser_1 ~1 0.056 0.003 0.109 0.230 2.066 0.039
asser_t1 ~1 3.059 2.958 3.161 5.357 59.032 0.000
d_asser_1 ~~ d_asser_1 0.059 0.008 0.109 1.000 2.281 0.023
asser_t1 ~~ d_asser_1 -0.026 -0.064 0.012 -0.188 -1.358 0.174
d_asser_1 ~~ sb07_02_t1 0.013 -0.047 0.073 0.046 0.428 0.668
sb07_02_t1 ~~ sb07_02_t1 1.345 1.177 1.514 1.000 15.655 0.000

Correlation of specific, facet-level change goals with assertiveness change score (current-self) is not significantly different from zero, r = 0.046, p = 0.668.

6.4.2.8 Assertiveness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8941.725 9027.703 0.942 0.049 0.066
# parameters of interest
params_lcs_asser_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.931 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.635 NA NA
d_asser_1 ~1 -0.033 -0.072 0.005 -0.158 -1.699 0.089
asser_t1 ~1 4.068 3.983 4.153 13.163 93.681 0.000
d_asser_1 ~~ d_asser_1 0.044 0.004 0.085 1.000 2.135 0.033
asser_t1 ~~ d_asser_1 -0.015 -0.036 0.006 -0.229 -1.379 0.168
d_asser_1 ~~ sb07_02_t1 0.015 -0.027 0.057 0.061 0.692 0.489
sb07_02_t1 ~~ sb07_02_t1 1.345 1.177 1.514 1.000 15.655 0.000

Correlation of specific, facet-level change goals with assertiveness change score (ideal-self) is not significantly different from zero, r = 0.061, p = 0.489.

6.4.2.9 Energy - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8985.722 9071.7 0.945 0.065 0.073
# parameters of interest
params_lcs_energ_curr_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.986 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.541 NA NA
d_energ_1 ~1 -0.091 -0.137 -0.046 -0.423 -3.958 0.000
energ_t1 ~1 2.709 2.610 2.809 6.885 53.380 0.000
d_energ_1 ~~ d_energ_1 0.047 0.010 0.083 1.000 2.488 0.013
energ_t1 ~~ d_energ_1 -0.021 -0.043 0.001 -0.248 -1.891 0.059
d_energ_1 ~~ sb06_01_t1 -0.018 -0.056 0.020 -0.084 -0.933 0.351
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.246 0.000

Correlation of general change goal with energy change score (current-self) is not significantly different from zero, r = -0.084, p = 0.351.

6.4.2.10 Energy - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8377.079 8463.057 0.949 0.044 0.047
# parameters of interest
params_lcs_energ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.944 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.682 NA NA
d_energ_1 ~1 0.015 -0.031 0.062 0.060 0.649 0.516
energ_t1 ~1 2.256 2.148 2.363 6.274 41.048 0.000
d_energ_1 ~~ d_energ_1 0.067 0.004 0.131 1.000 2.088 0.037
energ_t1 ~~ d_energ_1 -0.026 -0.066 0.015 -0.276 -1.247 0.213
d_energ_1 ~~ sb06_01_t1 -0.036 -0.085 0.013 -0.140 -1.440 0.150
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.195 0.000
sb06_01_t1 ~1 3.111 3.008 3.213 3.143 59.292 0.000

Correlation of general change goal with energy change score (ideal-self) is not significantly different from zero, r = -0.14, p = 0.15.

6.4.2.11 Energy - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9143.348 9229.325 0.903 0.088 0.094
# parameters of interest
params_lcs_energ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.010 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.572 NA NA
d_energ_1 ~1 -0.091 -0.136 -0.046 -0.410 -3.942 0.000
energ_t1 ~1 2.709 2.609 2.809 6.905 53.341 0.000
d_energ_1 ~~ d_energ_1 0.049 0.011 0.088 1.000 2.491 0.013
energ_t1 ~~ d_energ_1 -0.026 -0.051 -0.002 -0.300 -2.102 0.036
d_energ_1 ~~ sb07_03_t1 0.025 -0.019 0.069 0.092 1.127 0.260
sb07_03_t1 ~~ sb07_03_t1 1.526 1.316 1.735 1.000 14.279 0.000

Correlation of specific, facet-level change goals with energy change score (current-self) is not significantly different from zero, r = 0.092, p = 0.26.

6.4.2.12 Energy - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8536.791 8622.769 0.934 0.05 0.058
# parameters of interest
params_lcs_energ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.937 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.669 NA NA
d_energ_1 ~1 0.016 -0.031 0.063 0.061 0.651 0.515
energ_t1 ~1 2.256 2.148 2.363 6.253 41.044 0.000
d_energ_1 ~~ d_energ_1 0.066 0.004 0.129 1.000 2.075 0.038
energ_t1 ~~ d_energ_1 -0.024 -0.064 0.016 -0.259 -1.176 0.239
d_energ_1 ~~ sb07_03_t1 0.025 -0.035 0.085 0.079 0.818 0.413
sb07_03_t1 ~~ sb07_03_t1 1.526 1.316 1.735 1.000 14.278 0.000

Correlation of specific, facet-level change goals with energy change score (ideal-self) is not significantly different from zero, r = 0.079, p = 0.413.

6.4.2.13 Compassion - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8698.681 8784.659 0.991 0.022 0.037
# parameters of interest
params_lcs_compa_curr_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.141 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.407 NA NA
d_compa_1 ~1 0.105 0.037 0.172 0.410 3.047 0.002
compa_t1 ~1 4.148 4.058 4.239 5.779 89.697 0.000
d_compa_1 ~~ d_compa_1 0.065 -0.014 0.144 1.000 1.622 0.105
compa_t1 ~~ d_compa_1 -0.093 -0.169 -0.016 -0.504 -2.371 0.018
d_compa_1 ~~ sb06_01_t1 0.038 -0.015 0.090 0.148 1.390 0.165
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.255 0.000

Correlation of general change goal with compassion change score (current-self) is not significantly different from zero, r = 0.148, p = 0.165.

6.4.2.14 Compassion - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9113.329 9199.307 0.988 0.021 0.042
# parameters of interest
params_lcs_compa_ideal_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.085 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.743 NA NA
d_compa_1 ~1 0.015 -0.067 0.098 0.033 0.368 0.713
compa_t1 ~1 4.181 4.086 4.275 6.066 86.683 0.000
d_compa_1 ~~ d_compa_1 0.223 0.090 0.356 1.000 3.281 0.001
compa_t1 ~~ d_compa_1 -0.147 -0.252 -0.043 -0.453 -2.763 0.006
d_compa_1 ~~ sb06_01_t1 0.024 -0.058 0.106 0.052 0.580 0.562
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.232 0.000

Correlation of general change goal with compassion change score (ideal-self) is not significantly different from zero, r = 0.052, p = 0.562.

6.4.2.15 Compassion - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8942.98 9028.958 0.977 0.036 0.056
# parameters of interest
params_lcs_compa_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.140 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.403 NA NA
d_compa_1 ~1 0.104 0.037 0.171 0.414 3.052 0.002
compa_t1 ~1 4.149 4.058 4.239 5.823 89.775 0.000
d_compa_1 ~~ d_compa_1 0.063 -0.015 0.141 1.000 1.594 0.111
compa_t1 ~~ d_compa_1 -0.090 -0.166 -0.014 -0.503 -2.324 0.020
d_compa_1 ~~ sb07_04_t1 -0.004 -0.089 0.081 -0.012 -0.095 0.924
sb07_04_t1 ~~ sb07_04_t1 1.937 1.756 2.117 1.000 21.048 0.000

Correlation of specific, facet-level change goals with compassion change score (current-self) is not significantly different from zero, r = -0.012, p = 0.924.

6.4.2.16 Compassion - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9355.968 9441.945 0.978 0.029 0.048
# parameters of interest
params_lcs_compa_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.088 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.747 NA NA
d_compa_1 ~1 0.016 -0.066 0.098 0.033 0.376 0.707
compa_t1 ~1 4.181 4.086 4.275 6.064 86.677 0.000
d_compa_1 ~~ d_compa_1 0.224 0.093 0.356 1.000 3.342 0.001
compa_t1 ~~ d_compa_1 -0.149 -0.252 -0.046 -0.456 -2.833 0.005
d_compa_1 ~~ sb07_04_t1 -0.034 -0.146 0.079 -0.051 -0.588 0.556
sb07_04_t1 ~~ sb07_04_t1 1.937 1.756 2.117 1.000 21.048 0.000

Correlation of specific, facet-level change goals with compassion change score (ideal-self) is not significantly different from zero, r = -0.051, p = 0.556.

6.4.2.17 Respectfulness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7956.84 8042.818 0.942 0.067 0.057
# parameters of interest
params_lcs_respe_curr_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.129 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.634 NA NA
d_respe_1 ~1 0.065 0.010 0.120 0.198 2.328 0.020
respe_t1 ~1 4.398 4.321 4.475 7.514 111.747 0.000
d_respe_1 ~~ d_respe_1 0.108 0.054 0.162 1.000 3.899 0.000
respe_t1 ~~ d_respe_1 -0.091 -0.149 -0.033 -0.472 -3.063 0.002
d_respe_1 ~~ sb06_01_t1 -0.035 -0.086 0.016 -0.108 -1.351 0.177
sb06_01_t1 ~~ sb06_01_t1 0.979 0.844 1.115 1.000 14.194 0.000
sb06_01_t1 ~1 3.109 3.006 3.212 3.141 59.230 0.000

Correlation of general change goal with respectfulness change score (current-self) is not significantly different from zero, r = -0.108, p = 0.177.

6.4.2.18 Respectfulness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7424.113 7510.091 0.908 0.069 0.065
# parameters of interest
params_lcs_respe_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.243 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.820 NA NA
d_respe_1 ~1 0.041 -0.013 0.095 0.135 1.493 0.135
respe_t1 ~1 4.618 4.551 4.686 10.049 134.737 0.000
d_respe_1 ~~ d_respe_1 0.092 0.008 0.176 1.000 2.144 0.032
respe_t1 ~~ d_respe_1 -0.083 -0.158 -0.008 -0.597 -2.178 0.029
d_respe_1 ~~ sb06_01_t1 0.007 -0.036 0.050 0.025 0.341 0.733
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.186 0.000

Correlation of general change goal with respectfulness change score (ideal-self) is not significantly different from zero, r = 0.025, p = 0.733.

6.4.2.19 Respectfulness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8177.119 8263.097 0.891 0.094 0.104
# parameters of interest
params_lcs_respe_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.122 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.623 NA NA
d_respe_1 ~1 0.065 0.011 0.120 0.201 2.340 0.019
respe_t1 ~1 4.398 4.321 4.475 7.513 111.719 0.000
d_respe_1 ~~ d_respe_1 0.106 0.051 0.160 1.000 3.809 0.000
respe_t1 ~~ d_respe_1 -0.088 -0.148 -0.028 -0.463 -2.889 0.004
d_respe_1 ~~ sb07_05_t1 0.011 -0.062 0.085 0.026 0.304 0.761
sb07_05_t1 ~~ sb07_05_t1 1.809 1.604 2.013 1.000 17.341 0.000

Correlation of specific, facet-level change goals with respectfulness change score (current-self) is not significantly different from zero, r = 0.026, p = 0.761.

6.4.2.20 Respectfulness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7638.682 7724.66 0.901 0.072 0.067
# parameters of interest
params_lcs_respe_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.249 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.833 NA NA
d_respe_1 ~1 0.041 -0.012 0.094 0.134 1.508 0.132
respe_t1 ~1 4.618 4.551 4.686 10.080 134.848 0.000
d_respe_1 ~~ d_respe_1 0.093 0.008 0.178 1.000 2.154 0.031
respe_t1 ~~ d_respe_1 -0.084 -0.160 -0.009 -0.603 -2.195 0.028
d_respe_1 ~~ sb07_05_t1 -0.057 -0.113 0.000 -0.138 -1.971 0.049
sb07_05_t1 ~~ sb07_05_t1 1.809 1.604 2.013 1.000 17.341 0.000

The correlation of specific, facet-level change goals with the respectfulness change score (ideal-self) is (barely) significantly different from zero, r = -0.138, p = 0.049.

6.4.2.21 Trust - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9066.046 9152.024 0.959 0.053 0.041
# parameters of interest
params_lcs_trust_curr_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.026 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.559 NA NA
d_trust_1 ~1 -0.111 -0.181 -0.040 -0.341 -3.086 0.002
trust_t1 ~1 2.876 2.764 2.988 4.838 50.258 0.000
d_trust_1 ~~ d_trust_1 0.105 0.014 0.196 1.000 2.269 0.023
trust_t1 ~~ d_trust_1 -0.061 -0.122 -0.001 -0.318 -1.976 0.048
d_trust_1 ~~ sb06_01_t1 -0.006 -0.066 0.053 -0.020 -0.213 0.832
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.272 0.000

Correlation of general change goal with trust change score (current-self) is not significantly different from zero, r = -0.02, p = 0.832.

6.4.2.22 Trust - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8682.563 8768.541 0.972 0.038 0.043
# parameters of interest
params_lcs_trust_ideal_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.996 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.611 NA NA
d_trust_1 ~1 -0.020 -0.067 0.026 -0.082 -0.852 0.394
trust_t1 ~1 1.962 1.874 2.049 4.856 43.900 0.000
d_trust_1 ~~ d_trust_1 0.061 0.010 0.113 1.000 2.337 0.019
trust_t1 ~~ d_trust_1 -0.030 -0.064 0.004 -0.301 -1.755 0.079
d_trust_1 ~~ sb06_01_t1 -0.016 -0.063 0.030 -0.067 -0.697 0.486
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.109 3.007 3.212 3.142 59.310 0.000

Correlation of general change goal with trust change score (ideal-self) is not significantly different from zero, r = -0.067, p = 0.486.

6.4.2.23 Trust - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9284.026 9370.004 0.954 0.056 0.048
# parameters of interest
params_lcs_trust_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.025 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.558 NA NA
d_trust_1 ~1 -0.111 -0.181 -0.040 -0.342 -3.076 0.002
trust_t1 ~1 2.876 2.764 2.988 4.834 50.276 0.000
d_trust_1 ~~ d_trust_1 0.105 0.014 0.195 1.000 2.269 0.023
trust_t1 ~~ d_trust_1 -0.061 -0.122 0.000 -0.317 -1.975 0.048
d_trust_1 ~~ sb07_06_t1 -0.003 -0.082 0.077 -0.007 -0.071 0.944
sb07_06_t1 ~~ sb07_06_t1 1.807 1.641 1.972 1.000 21.383 0.000

Correlation of specific, facet-level change goals with trust change score (current-self) is not significantly different from zero, r = -0.007, p = 0.944.

6.4.2.24 Trust - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8900.72 8986.698 0.959 0.045 0.05
# parameters of interest
params_lcs_trust_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.990 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.602 NA NA
d_trust_1 ~1 -0.020 -0.066 0.026 -0.082 -0.849 0.396
trust_t1 ~1 1.961 1.874 2.049 4.876 43.903 0.000
d_trust_1 ~~ d_trust_1 0.060 0.009 0.111 1.000 2.305 0.021
trust_t1 ~~ d_trust_1 -0.028 -0.062 0.005 -0.288 -1.648 0.099
d_trust_1 ~~ sb07_06_t1 0.018 -0.043 0.079 0.055 0.573 0.566
sb07_06_t1 ~~ sb07_06_t1 1.807 1.641 1.972 1.000 21.379 0.000

Correlation of specific, facet-level change goals with trust change score (ideal-self) is not significantly different from zero, r = 0.055, p = 0.566.

6.4.2.25 Organization - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8616.801 8702.779 0.977 0.054 0.046
# parameters of interest
params_lcs_organ_curr_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.070 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.535 NA NA
d_organ_1 ~1 -0.138 -0.217 -0.059 -0.269 -3.444 0.001
organ_t1 ~1 2.865 2.729 3.000 2.787 41.400 0.000
d_organ_1 ~~ d_organ_1 0.264 0.149 0.378 1.000 4.507 0.000
organ_t1 ~~ d_organ_1 -0.199 -0.292 -0.106 -0.377 -4.183 0.000
d_organ_1 ~~ sb06_01_t1 -0.074 -0.153 0.006 -0.145 -1.822 0.068
sb06_01_t1 ~~ sb06_01_t1 0.980 0.845 1.115 1.000 14.188 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.281 0.000

Correlation of general change goal with organization change score (current-self) is not significantly different from zero, r = -0.145, p = 0.068.

6.4.2.26 Organization - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7593.783 7679.761 0.907 0.059 0.064
# parameters of interest
params_lcs_organ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.053 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.797 NA NA
d_organ_1 ~1 -0.043 -0.106 0.020 -0.127 -1.325 0.185
organ_t1 ~1 1.711 1.613 1.810 3.854 34.044 0.000
d_organ_1 ~~ d_organ_1 0.113 0.042 0.184 1.000 3.117 0.002
organ_t1 ~~ d_organ_1 -0.066 -0.120 -0.012 -0.443 -2.416 0.016
d_organ_1 ~~ sb06_01_t1 -0.016 -0.069 0.038 -0.047 -0.577 0.564
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.221 0.000

Correlation of general change goal with organization change score (ideal-self) is not significantly different from zero, r = -0.047, p = 0.564.

6.4.2.27 Organization - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8900.004 8985.981 0.874 0.132 0.151
# parameters of interest
params_lcs_organ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.112 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.586 NA NA
d_organ_1 ~1 -0.140 -0.218 -0.061 -0.258 -3.480 0.001
organ_t1 ~1 2.865 2.729 3.000 2.794 41.405 0.000
d_organ_1 ~~ d_organ_1 0.292 0.161 0.423 1.000 4.370 0.000
organ_t1 ~~ d_organ_1 -0.247 -0.364 -0.130 -0.445 -4.148 0.000
d_organ_1 ~~ sb07_07_t1 0.103 -0.032 0.239 0.130 1.492 0.136
sb07_07_t1 ~~ sb07_07_t1 2.162 1.960 2.364 1.000 21.025 0.000

Correlation of specific, facet-level change goals with organization change score (current-self) is not significantly different from zero, r = 0.13, p = 0.136.

6.4.2.28 Organization - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7874.008 7959.986 0.924 0.053 0.062
# parameters of interest
params_lcs_organ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.052 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.800 NA NA
d_organ_1 ~1 -0.042 -0.104 0.021 -0.125 -1.304 0.192
organ_t1 ~1 1.711 1.612 1.809 3.898 34.102 0.000
d_organ_1 ~~ d_organ_1 0.112 0.042 0.182 1.000 3.123 0.002
organ_t1 ~~ d_organ_1 -0.065 -0.118 -0.012 -0.443 -2.404 0.016
d_organ_1 ~~ sb07_07_t1 0.050 -0.028 0.128 0.102 1.256 0.209
sb07_07_t1 ~~ sb07_07_t1 2.161 1.960 2.362 1.000 21.052 0.000

Correlation of specific, facet-level change goals with organization change score (ideal-self) is not significantly different from zero, r = 0.102, p = 0.209.

6.4.2.29 Productiveness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8558.254 8644.231 0.962 0.06 0.063
# parameters of interest
params_lcs_produ_curr_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.054 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.517 NA NA
d_produ_1 ~1 -0.152 -0.219 -0.085 -0.405 -4.459 0.000
produ_t1 ~1 3.377 3.257 3.498 4.402 54.979 0.000
d_produ_1 ~~ d_produ_1 0.142 0.072 0.212 1.000 3.954 0.000
produ_t1 ~~ d_produ_1 -0.100 -0.165 -0.035 -0.346 -3.029 0.002
d_produ_1 ~~ sb06_01_t1 0.023 -0.038 0.084 0.062 0.739 0.460
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.191 0.000
sb06_01_t1 ~1 3.109 3.006 3.212 3.141 59.257 0.000

Correlation of general change goal with productiveness change score (current-self) is not significantly different from zero, r = 0.062, p = 0.46.

6.4.2.30 Productiveness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7122.354 7208.332 0.924 0.058 0.056
# parameters of interest
params_lcs_produ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.205 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.878 NA NA
d_produ_1 ~1 -0.022 -0.074 0.031 -0.067 -0.808 0.419
produ_t1 ~1 1.635 1.554 1.716 3.697 39.516 0.000
d_produ_1 ~~ d_produ_1 0.104 0.029 0.179 1.000 2.709 0.007
produ_t1 ~~ d_produ_1 -0.082 -0.136 -0.029 -0.578 -3.028 0.002
d_produ_1 ~~ sb06_01_t1 0.009 -0.039 0.058 0.030 0.381 0.703
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.212 3.142 59.301 0.000

Correlation of general change goal with productiveness change score (ideal-self) is not significantly different from zero, r = 0.03, p = 0.703.

6.4.2.31 Productiveness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8733.369 8819.347 0.919 0.091 0.117
# parameters of interest
params_lcs_produ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.070 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.539 NA NA
d_produ_1 ~1 -0.152 -0.219 -0.085 -0.395 -4.444 0.000
produ_t1 ~1 3.377 3.256 3.497 4.417 54.947 0.000
d_produ_1 ~~ d_produ_1 0.148 0.076 0.221 1.000 3.992 0.000
produ_t1 ~~ d_produ_1 -0.111 -0.181 -0.042 -0.378 -3.149 0.002
d_produ_1 ~~ sb07_08_t1 0.052 -0.030 0.134 0.106 1.233 0.218
sb07_08_t1 ~~ sb07_08_t1 1.606 1.377 1.836 1.000 13.719 0.000

Correlation of specific, facet-level change goals with productiveness change score (current-self) is not significantly different from zero, r = 0.106, p = 0.218.

6.4.2.32 Productiveness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7298.571 7384.549 0.932 0.055 0.056
# parameters of interest
params_lcs_produ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.205 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.878 NA NA
d_produ_1 ~1 -0.022 -0.074 0.031 -0.067 -0.807 0.420
produ_t1 ~1 1.635 1.554 1.716 3.694 39.517 0.000
d_produ_1 ~~ d_produ_1 0.104 0.029 0.179 1.000 2.715 0.007
produ_t1 ~~ d_produ_1 -0.082 -0.135 -0.029 -0.578 -3.043 0.002
d_produ_1 ~~ sb07_08_t1 0.003 -0.051 0.058 0.008 0.123 0.903
sb07_08_t1 ~~ sb07_08_t1 1.606 1.377 1.836 1.000 13.720 0.000

Correlation of specific, facet-level change goals with productiveness change score (ideal-self) is not significantly different from zero, r = 0.008, p = 0.903.

6.4.2.33 Responsibility - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8688.187 8774.165 0.91 0.082 0.086
# parameters of interest
params_lcs_respo_curr_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.991 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.472 NA NA
d_respo_1 ~1 0.042 -0.004 0.088 0.199 1.775 0.076
respo_t1 ~1 3.623 3.528 3.719 8.224 74.304 0.000
d_respo_1 ~~ d_respo_1 0.044 0.004 0.084 1.000 2.169 0.030
respo_t1 ~~ d_respo_1 -0.020 -0.046 0.005 -0.220 -1.568 0.117
d_respo_1 ~~ sb06_01_t1 -0.038 -0.080 0.004 -0.182 -1.757 0.079
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.008 3.213 3.143 59.282 0.000

Correlation of general change goal with responsibility change score (current-self) is not significantly different from zero, r = -0.182, p = 0.079.

6.4.2.34 Responsibility - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8006.85 8092.828 0.979 0.03 0.041
# parameters of interest
params_lcs_respo_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.004 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.609 NA NA
d_respo_1 ~1 -0.018 -0.077 0.040 -0.066 -0.614 0.539
respo_t1 ~1 4.231 4.128 4.335 9.211 80.245 0.000
d_respo_1 ~~ d_respo_1 0.078 0.026 0.130 1.000 2.938 0.003
respo_t1 ~~ d_respo_1 -0.040 -0.083 0.003 -0.310 -1.806 0.071
d_respo_1 ~~ sb06_01_t1 0.019 -0.035 0.074 0.070 0.700 0.484
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.190 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.240 0.000

Correlation of general change goal with responsibility change score (ideal-self) is not significantly different from zero, r = 0.07, p = 0.484.

6.4.2.35 Responsibility - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8981.854 9067.831 0.86 0.105 0.118
# parameters of interest
params_lcs_respo_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.013 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.500 NA NA
d_respo_1 ~1 0.042 -0.005 0.088 0.191 1.764 0.078
respo_t1 ~1 3.623 3.528 3.719 8.191 74.281 0.000
d_respo_1 ~~ d_respo_1 0.048 0.006 0.090 1.000 2.217 0.027
respo_t1 ~~ d_respo_1 -0.026 -0.055 0.002 -0.273 -1.811 0.070
d_respo_1 ~~ sb07_09_t1 -0.061 -0.126 0.004 -0.186 -1.826 0.068
sb07_09_t1 ~~ sb07_09_t1 2.235 2.060 2.410 1.000 25.004 0.000

Correlation of specific, facet-level change goals with responsibility change score (current-self) is not significantly different from zero, r = -0.186, p = 0.068.

6.4.2.36 Responsibility - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8300.929 8386.907 0.986 0.025 0.041
# parameters of interest
params_lcs_respo_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.004 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.612 NA NA
d_respo_1 ~1 -0.018 -0.077 0.040 -0.066 -0.613 0.540
respo_t1 ~1 4.231 4.128 4.335 9.315 80.295 0.000
d_respo_1 ~~ d_respo_1 0.077 0.026 0.128 1.000 2.939 0.003
respo_t1 ~~ d_respo_1 -0.039 -0.082 0.003 -0.311 -1.803 0.071
d_respo_1 ~~ sb07_09_t1 0.010 -0.069 0.090 0.025 0.252 0.801
sb07_09_t1 ~~ sb07_09_t1 2.235 2.060 2.410 1.000 25.008 0.000

Correlation of specific, facet-level change goals with responsibility change score (ideal-self) is not significantly different from zero, r = 0.025, p = 0.801.

6.4.2.37 Anxiety - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9015.891 9101.869 0.967 0.051 0.062
# parameters of interest
params_lcs_anxie_curr_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.062 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.661 NA NA
d_anxie_1 ~1 0.217 0.126 0.309 0.382 4.663 0.000
anxie_t1 ~1 2.842 2.716 2.967 3.111 44.418 0.000
d_anxie_1 ~~ d_anxie_1 0.324 0.150 0.497 1.000 3.658 0.000
anxie_t1 ~~ d_anxie_1 -0.209 -0.326 -0.092 -0.402 -3.496 0.000
d_anxie_1 ~~ sb06_01_t1 0.070 -0.008 0.149 0.125 1.763 0.078
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.191 0.000
sb06_01_t1 ~1 3.111 3.008 3.213 3.143 59.292 0.000

Correlation of general change goal with anxiety change score (current-self) is not significantly different from zero, r = 0.125, p = 0.078.

6.4.2.38 Anxiety - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8708.076 8794.053 1 0 0.043
# parameters of interest
params_lcs_anxie_ideal_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.182 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.861 NA NA
d_anxie_1 ~1 0.038 -0.004 0.080 0.169 1.757 0.079
anxie_t1 ~1 4.553 4.487 4.619 14.754 135.065 0.000
d_anxie_1 ~~ d_anxie_1 0.051 -0.002 0.103 1.000 1.880 0.060
anxie_t1 ~~ d_anxie_1 -0.039 -0.080 0.003 -0.559 -1.825 0.068
d_anxie_1 ~~ sb06_01_t1 0.003 -0.031 0.038 0.015 0.185 0.853
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.212 3.142 59.271 0.000

Correlation of general change goal with anxiety change score (ideal-self) is not significantly different from zero, r = 0.015, p = 0.853.

6.4.2.39 Anxiety - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9306.853 9392.831 0.864 0.111 0.133
# parameters of interest
params_lcs_anxie_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.152 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.801 NA NA
d_anxie_1 ~1 0.213 0.122 0.304 0.337 4.588 0.000
anxie_t1 ~1 2.842 2.717 2.968 3.122 44.470 0.000
d_anxie_1 ~~ d_anxie_1 0.401 0.192 0.610 1.000 3.768 0.000
anxie_t1 ~~ d_anxie_1 -0.303 -0.444 -0.161 -0.525 -4.196 0.000
d_anxie_1 ~~ sb07_10_t1 -0.233 -0.381 -0.085 -0.244 -3.083 0.002
sb07_10_t1 ~~ sb07_10_t1 2.271 2.044 2.498 1.000 19.605 0.000

The correlation of specific, facet-level change goals with the anxiety change score (current-self) is significantly different from zero, r = -0.244, p = 0.002.

6.4.2.40 Anxiety - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9007.291 9093.269 0.974 0.028 0.049
# parameters of interest
params_lcs_anxie_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.180 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.858 NA NA
d_anxie_1 ~1 0.038 -0.004 0.081 0.169 1.754 0.079
anxie_t1 ~1 4.553 4.487 4.619 14.725 135.023 0.000
d_anxie_1 ~~ d_anxie_1 0.051 -0.002 0.103 1.000 1.881 0.060
anxie_t1 ~~ d_anxie_1 -0.039 -0.080 0.003 -0.557 -1.827 0.068
d_anxie_1 ~~ sb07_10_t1 0.010 -0.035 0.056 0.031 0.454 0.650
sb07_10_t1 ~~ sb07_10_t1 2.271 2.044 2.498 1.000 19.605 0.000

Correlation of specific, facet-level change goals with anxiety change score (ideal-self) is not significantly different from zero, r = 0.031, p = 0.65.

6.4.2.41 Depression - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8893.125 8979.103 0.928 0.094 0.097
# parameters of interest
params_lcs_depre_curr_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.968 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.564 NA NA
d_depre_1 ~1 0.150 0.088 0.212 0.413 4.750 0.000
depre_t1 ~1 2.964 2.851 3.076 4.763 51.528 0.000
d_depre_1 ~~ d_depre_1 0.132 0.072 0.191 1.000 4.326 0.000
depre_t1 ~~ d_depre_1 -0.053 -0.088 -0.017 -0.233 -2.918 0.004
d_depre_1 ~~ sb06_01_t1 0.025 -0.026 0.075 0.068 0.956 0.339
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.008 3.213 3.143 59.299 0.000

Correlation of general change goal with depression change score (current-self) is not significantly different from zero, r = 0.068, p = 0.339.

6.4.2.42 Depression - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7117.271 7203.249 0.947 0.051 0.052
# parameters of interest
params_lcs_depre_ideal_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.068 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.828 NA NA
d_depre_1 ~1 0.027 -0.024 0.077 0.082 1.041 0.298
depre_t1 ~1 4.408 4.337 4.480 10.523 121.211 0.000
d_depre_1 ~~ d_depre_1 0.105 0.046 0.165 1.000 3.465 0.001
depre_t1 ~~ d_depre_1 -0.064 -0.112 -0.016 -0.468 -2.597 0.009
d_depre_1 ~~ sb06_01_t1 0.035 -0.014 0.085 0.110 1.401 0.161
sb06_01_t1 ~~ sb06_01_t1 0.979 0.844 1.115 1.000 14.196 0.000
sb06_01_t1 ~1 3.110 3.008 3.213 3.143 59.290 0.000

Correlation of general change goal with depression change score (ideal-self) is not significantly different from zero, r = 0.11, p = 0.161.

6.4.2.43 Depression - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9213.747 9299.724 0.853 0.141 0.163
# parameters of interest
params_lcs_depre_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.063 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.701 NA NA
d_depre_1 ~1 0.148 0.086 0.211 0.363 4.674 0.000
depre_t1 ~1 2.964 2.851 3.077 4.777 51.556 0.000
d_depre_1 ~~ d_depre_1 0.167 0.089 0.245 1.000 4.211 0.000
depre_t1 ~~ d_depre_1 -0.106 -0.160 -0.051 -0.417 -3.812 0.000
d_depre_1 ~~ sb07_11_t1 -0.182 -0.299 -0.065 -0.282 -3.059 0.002
sb07_11_t1 ~~ sb07_11_t1 2.490 2.292 2.689 1.000 24.587 0.000

The correlation of specific, facet-level change goals with the depression change score (current-self) is significantly different from zero, r = -0.282, p = 0.002.

6.4.2.44 Depression - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7451.024 7537.002 0.955 0.047 0.049
# parameters of interest
params_lcs_depre_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.064 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.819 NA NA
d_depre_1 ~1 0.026 -0.024 0.077 0.082 1.023 0.306
depre_t1 ~1 4.408 4.337 4.480 10.446 121.130 0.000
d_depre_1 ~~ d_depre_1 0.105 0.045 0.166 1.000 3.422 0.001
depre_t1 ~~ d_depre_1 -0.063 -0.112 -0.014 -0.460 -2.534 0.011
d_depre_1 ~~ sb07_11_t1 -0.032 -0.097 0.032 -0.063 -0.978 0.328
sb07_11_t1 ~~ sb07_11_t1 2.489 2.291 2.688 1.000 24.582 0.000

Correlation of specific, facet-level change goals with the depression change score (ideal-self) is not significantly different from zero, r = -0.063, p = 0.328.

6.4.2.45 Volatility - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9005.976 9091.954 0.977 0.049 0.057
# parameters of interest
params_lcs_volat_curr_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.059 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.632 NA NA
d_volat_1 ~1 -0.174 -0.251 -0.097 -0.334 -4.434 0.000
volat_t1 ~1 3.229 3.107 3.351 3.700 51.914 0.000
d_volat_1 ~~ d_volat_1 0.271 0.180 0.362 1.000 5.840 0.000
volat_t1 ~~ d_volat_1 -0.177 -0.248 -0.106 -0.389 -4.888 0.000
d_volat_1 ~~ sb06_01_t1 0.012 -0.065 0.089 0.023 0.308 0.758
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.212 3.142 59.301 0.000

Correlation of general change goal with volatility change score (current-self) is not significantly different from zero, r = 0.023, p = 0.758.

6.4.2.46 Volatility - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8127.244 8213.222 0.93 0.053 0.056
# parameters of interest
params_lcs_volat_ideal_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.944 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.589 NA NA
d_volat_1 ~1 -0.008 -0.072 0.056 -0.027 -0.253 0.800
volat_t1 ~1 1.709 1.625 1.793 3.514 39.911 0.000
d_volat_1 ~~ d_volat_1 0.092 0.024 0.160 1.000 2.659 0.008
volat_t1 ~~ d_volat_1 -0.032 -0.078 0.015 -0.215 -1.335 0.182
d_volat_1 ~~ sb06_01_t1 -0.068 -0.129 -0.007 -0.226 -2.172 0.030
sb06_01_t1 ~~ sb06_01_t1 0.979 0.844 1.115 1.000 14.193 0.000
sb06_01_t1 ~1 3.111 3.008 3.214 3.143 59.298 0.000

Correlation of general change goal with volatility change score (ideal-self) is significantly different from zero, r = -0.226, p = 0.03.

6.4.2.47 Volatility - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9211.122 9297.099 0.959 0.066 0.085
# parameters of interest
params_lcs_volat_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.061 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.634 NA NA
d_volat_1 ~1 -0.174 -0.251 -0.097 -0.333 -4.439 0.000
volat_t1 ~1 3.229 3.107 3.351 3.699 51.918 0.000
d_volat_1 ~~ d_volat_1 0.272 0.177 0.367 1.000 5.627 0.000
volat_t1 ~~ d_volat_1 -0.179 -0.254 -0.103 -0.392 -4.638 0.000
d_volat_1 ~~ sb07_12_t1 0.017 -0.089 0.124 0.025 0.321 0.748
sb07_12_t1 ~~ sb07_12_t1 1.743 1.565 1.921 1.000 19.222 0.000

Correlation of specific, facet-level change goals with volatility change score (current-self) is not significantly different from zero, r = 0.025, p = 0.748.

6.4.2.48 Volatility - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8337.934 8423.912 0.909 0.061 0.061
# parameters of interest
params_lcs_volat_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.942 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.588 NA NA
d_volat_1 ~1 -0.008 -0.072 0.056 -0.026 -0.246 0.806
volat_t1 ~1 1.709 1.625 1.792 3.531 39.958 0.000
d_volat_1 ~~ d_volat_1 0.091 0.024 0.159 1.000 2.645 0.008
volat_t1 ~~ d_volat_1 -0.031 -0.078 0.016 -0.210 -1.276 0.202
d_volat_1 ~~ sb07_12_t1 -0.005 -0.080 0.070 -0.012 -0.123 0.902
sb07_12_t1 ~~ sb07_12_t1 1.743 1.565 1.921 1.000 19.222 0.000

Correlation of specific, facet-level change goals with volatility change score (ideal-self) is not significantly different from zero, r = -0.012, p = 0.902.

6.4.2.49 Curiosity - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8762.021 8847.999 0.974 0.04 0.048
# parameters of interest
params_lcs_curio_curr_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.992 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.411 NA NA
d_curio_1 ~1 0.064 0.012 0.115 0.325 2.417 0.016
curio_t1 ~1 4.062 3.970 4.154 8.620 86.648 0.000
d_curio_1 ~~ d_curio_1 0.038 -0.009 0.085 1.000 1.591 0.112
curio_t1 ~~ d_curio_1 -0.017 -0.048 0.013 -0.187 -1.105 0.269
d_curio_1 ~~ sb06_01_t1 -0.002 -0.053 0.050 -0.009 -0.070 0.944
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.212 3.142 59.192 0.000

Correlation of general change goal with curiosity change score (current-self) is not significantly different from zero, r = -0.009, p = 0.944.

6.4.2.50 Curiosity - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8790.523 8876.501 0.987 0.022 0.04
# parameters of interest
params_lcs_curio_ideal_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.011 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.069 NA NA
d_curio_1 ~1 0.002 -0.040 0.045 0.094 0.106 0.915
curio_t1 ~1 4.434 4.362 4.506 12.307 120.992 0.000
d_curio_1 ~~ d_curio_1 0.001 -0.036 0.037 1.000 0.032 0.974
curio_t1 ~~ d_curio_1 -0.002 -0.027 0.024 -0.191 -0.129 0.897
d_curio_1 ~~ sb06_01_t1 0.009 -0.037 0.054 0.352 0.368 0.713
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.189 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.264 0.000

Correlation of general change goal with curiosity change score (ideal-self) is not significantly different from zero, r = 0.352, p = 0.713.

6.4.2.51 Curiosity - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8927.39 9013.368 0.95 0.055 0.066
# parameters of interest
params_lcs_curio_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.999 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.424 NA NA
d_curio_1 ~1 0.063 0.011 0.114 0.316 2.384 0.017
curio_t1 ~1 4.062 3.970 4.154 8.706 86.704 0.000
d_curio_1 ~~ d_curio_1 0.039 -0.009 0.087 1.000 1.611 0.107
curio_t1 ~~ d_curio_1 -0.019 -0.051 0.012 -0.210 -1.207 0.227
d_curio_1 ~~ sb07_13_t1 -0.028 -0.098 0.042 -0.114 -0.790 0.429
sb07_13_t1 ~~ sb07_13_t1 1.563 1.401 1.724 1.000 18.980 0.000

Correlation of specific, facet-level change goals with curiosity change score (current-self) is not significantly different from zero, r = -0.114, p = 0.429.

6.4.2.52 Curiosity - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8956.919 9042.897 0.977 0.029 0.043
# parameters of interest
params_lcs_curio_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.009 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.052 NA NA
d_curio_1 ~1 0.002 -0.040 0.045 0.130 0.111 0.912
curio_t1 ~1 4.434 4.362 4.506 12.250 120.804 0.000
d_curio_1 ~~ d_curio_1 0.000 -0.036 0.037 1.000 0.019 0.985
curio_t1 ~~ d_curio_1 -0.001 -0.027 0.024 -0.191 -0.099 0.921
d_curio_1 ~~ sb07_13_t1 0.005 -0.057 0.068 0.227 0.166 0.868
sb07_13_t1 ~~ sb07_13_t1 1.563 1.401 1.724 1.000 18.985 0.000

Correlation of specific, facet-level change goals with curiosity change score (ideal-self) is not significantly different from zero, r = 0.227, p = 0.868.

6.4.2.53 Aesthetic - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):
(here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_curr_hyp4 <- '
aesth_t1 =~ 1*bf05_05_t1 + lamb2*bf05_20_t1 + lamb3*bf05_35_t1 + lamb4*bf05_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf05_05_t2 + lamb2*bf05_20_t2 + lamb3*bf05_35_t2 + lamb4*bf05_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ aesth_t1       # This estimates the variance of aesth_t1 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_aesth_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

bf05_05_t1 ~~ bf05_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf05_20_t1 ~~ bf05_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf05_35_t1 ~~ bf05_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf05_50_t1 ~~ bf05_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf05_05_t1 ~~ res1*bf05_05_t1   # This allows residual variance on indicator X1 at T1 
bf05_20_t1 ~~ res2*bf05_20_t1   # This allows residual variance on indicator X2 at T1
bf05_35_t1 ~~ res3*bf05_35_t1   # This allows residual variance on indicator X3 at T1
bf05_50_t1 ~~ res4*bf05_50_t1   # This allows residual variance on indicator X4 at T1

bf05_05_t2 ~~ res1*bf05_05_t2  # This allows residual variance on indicator X1 at T2 
bf05_20_t2 ~~ res2*bf05_20_t2  # This allows residual variance on indicator X2 at T2 
bf05_35_t2 ~~ res3*bf05_35_t2  # This allows residual variance on indicator X3 at T2
bf05_50_t2 ~~ res4*bf05_50_t2  # This allows residual variance on indicator X4 at T2

bf05_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf05_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf05_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf05_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf05_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf05_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf05_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf05_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'

fit_mi_lcs_aesth_curr_hyp4 <- lavaan(mi_lcs_aesth_curr_hyp4, 
                                     data=df_sbsa_wide_pers_sb %>% filter(!is.na(bf05_05_t1) & !is.na(bf05_05_t2)), 
                                     estimator='mlr', fixed.x=FALSE, missing="fiml")
# This model did not converge properly with FIML and missings. No problem with complete data, though. 
summary(fit_mi_lcs_aesth_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 216 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        32
  Number of equality constraints                    10

  Number of observations                           331
  Number of missing patterns                         2

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                36.010      32.687
  Degrees of freedom                                32          32
  P-value (Chi-square)                           0.286       0.433
  Scaling correction factor                                  1.102
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1057.895     812.052
  Degrees of freedom                                36          36
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.303

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.996       0.999
  Tucker-Lewis Index (TLI)                       0.996       0.999
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.000

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4220.689   -4220.689
  Scaling correction factor                                  0.861
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4202.684   -4202.684
  Scaling correction factor                                  1.163
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                8485.379    8485.379
  Bayesian (BIC)                              8569.025    8569.025
  Sample-size adjusted Bayesian (SABIC)       8499.241    8499.241

Root Mean Square Error of Approximation:

  RMSEA                                          0.019       0.008
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.047       0.041
  P-value H_0: RMSEA <= 0.050                    0.972       0.991
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.005
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.044
  P-value H_0: Robust RMSEA <= 0.050                         0.981
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.036       0.036

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b05_05_           1.000                               0.038    0.029
    b05_20_ (lmb2)   24.165    1.240   19.485    0.000    0.925    0.834
    b05_35_ (lmb3)   22.385    1.240   18.052    0.000    0.857    0.803
    b05_50_ (lmb4)  -18.358    1.335  -13.748    0.000   -0.703   -0.516
  aesth_t2 =~                                                           
    b05_05_           1.000                               0.039    0.030
    b05_20_ (lmb2)   24.165    1.240   19.485    0.000    0.951    0.840
    b05_35_ (lmb3)   22.385    1.240   18.052    0.000    0.881    0.810
    b05_50_ (lmb4)  -18.358    1.335  -13.748    0.000   -0.722   -0.526
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.583    0.583

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.973    0.973

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 ~~                                                           
    d_aesth_1        -0.000    0.000   -2.595    0.009   -0.253   -0.253
  d_aesth_1 ~~                                                          
    sb06_01_t1       -0.002    0.002   -0.927    0.354   -0.078   -0.079
 .bf05_05_t1 ~~                                                         
   .bf05_05_t2        0.550    0.106    5.209    0.000    0.550    0.316
 .bf05_20_t1 ~~                                                         
   .bf05_20_t2        0.108    0.069    1.547    0.122    0.108    0.286
 .bf05_35_t1 ~~                                                         
   .bf05_35_t2        0.108    0.061    1.792    0.073    0.108    0.268
 .bf05_50_t1 ~~                                                         
   .bf05_50_t2        0.820    0.098    8.324    0.000    0.820    0.603

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
    d_aesth_1         0.002    0.002    0.918    0.358    0.069    0.069
    aesth_t1          2.978    0.059   50.604    0.000   77.801   77.801
   .bf05_05_1         0.000                               0.000    0.000
   .bf05_20_1 (m2)  -68.134    3.474  -19.610    0.000  -68.134  -61.398
   .bf05_35_1 (m3)  -62.822    3.380  -18.587    0.000  -62.822  -58.851
   .bf05_50_1 (m4)   57.238    3.970   14.419    0.000   57.238   42.037
   .bf05_05_2         0.000                               0.000    0.000
   .bf05_20_2 (m2)  -68.134    3.474  -19.610    0.000  -68.134  -60.237
   .bf05_35_2 (m3)  -62.822    3.380  -18.587    0.000  -62.822  -57.817
   .bf05_50_2 (m4)   57.238    3.970   14.419    0.000   57.238   41.726
    sb06_01_1         3.107    0.055   56.725    0.000    3.107    3.139

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
    d_sth_1           0.001    0.000    3.860    0.000    1.000    1.000
    asth_t1           0.001    0.000    9.742    0.000    1.000    1.000
   .b05_05_ (res1)    1.742    0.070   24.782    0.000    1.742    0.999
   .b05_20_ (res2)    0.376    0.076    4.931    0.000    0.376    0.305
   .b05_35_ (res3)    0.405    0.059    6.871    0.000    0.405    0.356
   .b05_50_ (res4)    1.360    0.099   13.728    0.000    1.360    0.734
   .b05_05_ (res1)    1.742    0.070   24.782    0.000    1.742    0.999
   .b05_20_ (res2)    0.376    0.076    4.931    0.000    0.376    0.294
   .b05_35_ (res3)    0.405    0.059    6.871    0.000    0.405    0.343
   .b05_50_ (res4)    1.360    0.099   13.728    0.000    1.360    0.723
    s06_01_           0.979    0.072   13.676    0.000    0.979    1.000
# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
331 22 8485.379 8569.025 0.996 0.019 0.036
# parameters of interest
params_lcs_aesth_curr_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.973 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.583 NA NA
d_aesth_1 ~1 0.002 -0.002 0.005 0.069 0.918 0.358
aesth_t1 ~1 2.978 2.863 3.093 77.801 50.604 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 3.860 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.253 -2.595 0.009
d_aesth_1 ~~ sb06_01_t1 -0.002 -0.006 0.002 -0.079 -0.927 0.354
sb06_01_t1 ~~ sb06_01_t1 0.979 0.839 1.120 1.000 13.676 0.000
sb06_01_t1 ~1 3.107 3.000 3.214 3.139 56.725 0.000

Correlation of general change goal with aesthetic change score (current-self) is not significantly different from zero, r = -0.079, p = 0.354.

6.4.2.54 Aesthetic - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8888.161 8974.139 1 0 0.036
# parameters of interest
params_lcs_aesth_ideal_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.923 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.569 NA NA
d_aesth_1 ~1 -0.008 -0.022 0.007 -0.105 -1.054 0.292
aesth_t1 ~1 3.106 2.982 3.231 26.008 49.011 0.000
d_aesth_1 ~~ d_aesth_1 0.005 -0.006 0.017 1.000 0.939 0.348
aesth_t1 ~~ d_aesth_1 -0.001 -0.005 0.002 -0.166 -0.818 0.413
d_aesth_1 ~~ sb06_01_t1 -0.005 -0.019 0.009 -0.072 -0.725 0.469
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.195 0.000
sb06_01_t1 ~1 3.109 3.006 3.212 3.141 59.274 0.000

Correlation of general change goal with aesthetic change score (ideal-self) is not significantly different from zero, r = -0.072, p = 0.469.

6.4.2.55 Aesthetic - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal): (here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_curr_specif_hyp4 <- '
aesth_t1 =~ 1*bf05_05_t1 + lamb2*bf05_20_t1 + lamb3*bf05_35_t1 + lamb4*bf05_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf05_05_t2 + lamb2*bf05_20_t2 + lamb3*bf05_35_t2 + lamb4*bf05_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_aesth_1 ~~ sb07_14_t1    # estimates the covariance/correlation with change goal variable

bf05_05_t1 ~~ bf05_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf05_20_t1 ~~ bf05_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf05_35_t1 ~~ bf05_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf05_50_t1 ~~ bf05_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf05_05_t1 ~~ res1*bf05_05_t1   # This allows residual variance on indicator X1 at T1 
bf05_20_t1 ~~ res2*bf05_20_t1   # This allows residual variance on indicator X2 at T1
bf05_35_t1 ~~ res3*bf05_35_t1   # This allows residual variance on indicator X3 at T1
bf05_50_t1 ~~ res4*bf05_50_t1   # This allows residual variance on indicator X4 at T1

bf05_05_t2 ~~ res1*bf05_05_t2  # This allows residual variance on indicator X1 at T2 
bf05_20_t2 ~~ res2*bf05_20_t2  # This allows residual variance on indicator X2 at T2 
bf05_35_t2 ~~ res3*bf05_35_t2  # This allows residual variance on indicator X3 at T2
bf05_50_t2 ~~ res4*bf05_50_t2  # This allows residual variance on indicator X4 at T2

bf05_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf05_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf05_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf05_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf05_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf05_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf05_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf05_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb07_14_t1 ~~ sb07_14_t1
sb07_14_t1 ~ 1
'

fit_mi_lcs_aesth_curr_specif_hyp4 <- lavaan(mi_lcs_aesth_curr_specif_hyp4, 
                                            data=df_sbsa_wide_pers_sb %>% filter(!is.na(bf05_05_t1) & !is.na(bf05_05_t2)), 
                                            estimator='mlr', fixed.x=FALSE, missing="fiml")
Warning in lav_object_post_check(object): lavaan WARNING: covariance matrix of latent variables
                is not positive definite;
                use lavInspect(fit, "cov.lv") to investigate.
# This model did not converge properly with missing data and FIML -> no problem when only using complete data
summary(fit_mi_lcs_aesth_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 99 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        31
  Number of equality constraints                    10

  Number of observations                           331
  Number of missing patterns                         2

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               389.367     351.031
  Degrees of freedom                                33          33
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.109
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1061.777     828.089
  Degrees of freedom                                36          36
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.282

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.653       0.598
  Tucker-Lewis Index (TLI)                       0.621       0.562
                                                                  
  Robust Comparative Fit Index (CFI)                         0.652
  Robust Tucker-Lewis Index (TLI)                            0.621

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4500.501   -4500.501
  Scaling correction factor                                  0.805
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4305.817   -4305.817
  Scaling correction factor                                  1.140
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                9043.002    9043.002
  Bayesian (BIC)                              9122.847    9122.847
  Sample-size adjusted Bayesian (SABIC)       9056.234    9056.234

Root Mean Square Error of Approximation:

  RMSEA                                          0.181       0.171
  90 Percent confidence interval - lower         0.165       0.156
  90 Percent confidence interval - upper         0.197       0.186
  P-value H_0: RMSEA <= 0.050                    0.000       0.000
  P-value H_0: RMSEA >= 0.080                    1.000       1.000
                                                                  
  Robust RMSEA                                               0.180
  90 Percent confidence interval - lower                     0.164
  90 Percent confidence interval - upper                     0.197
  P-value H_0: Robust RMSEA <= 0.050                         0.000
  P-value H_0: Robust RMSEA >= 0.080                         1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.206       0.206

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b05_05_           1.000                               0.000    0.000
    b05_20_ (lmb2)    3.378    2.774    1.218    0.223    0.000    0.000
    b05_35_ (lmb3)    3.589    2.970    1.208    0.227    0.000    0.000
    b05_50_ (lmb4)   -3.742    3.168   -1.181    0.237   -0.000   -0.000
  aesth_t2 =~                                                           
    b05_05_           1.000                               0.145    0.110
    b05_20_ (lmb2)    3.378    2.774    1.218    0.223    0.491    0.426
    b05_35_ (lmb3)    3.589    2.970    1.208    0.227    0.522    0.464
    b05_50_ (lmb4)   -3.742    3.168   -1.181    0.237   -0.544   -0.385
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.837    0.837

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.000    0.000

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 ~~                                                           
    d_aesth_1         0.003    0.005    0.606    0.545      Inf      Inf
  d_aesth_1 ~~                                                          
    sb07_14_t1        0.030    0.033    0.900    0.368    0.244    0.179
 .bf05_05_t1 ~~                                                         
   .bf05_05_t2        0.546    0.105    5.191    0.000    0.546    0.315
 .bf05_20_t1 ~~                                                         
   .bf05_20_t2        0.733    0.095    7.691    0.000    0.733    0.674
 .bf05_35_t1 ~~                                                         
   .bf05_35_t2        0.637    0.084    7.618    0.000    0.637    0.642
 .bf05_50_t1 ~~                                                         
   .bf05_50_t2        1.183    0.107   11.100    0.000    1.183    0.694

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
    d_aesth_1         0.006    0.011    0.536    0.592    0.048    0.048
    aesth_t1          2.976    0.059   50.612    0.000      Inf      Inf
   .bf05_05_1         0.000                               0.000    0.000
   .bf05_20_1 (m2)   -6.214    8.257   -0.753    0.452   -6.214   -5.960
   .bf05_35_1 (m3)   -6.830    8.845   -0.772    0.440   -6.830   -6.853
   .bf05_50_1 (m4)   13.699    9.438    1.451    0.147   13.699   10.494
   .bf05_05_2         0.000                               0.000    0.000
   .bf05_20_2 (m2)   -6.214    8.257   -0.753    0.452   -6.214   -5.391
   .bf05_35_2 (m3)   -6.830    8.845   -0.772    0.440   -6.830   -6.070
   .bf05_50_2 (m4)   13.699    9.438    1.451    0.147   13.699    9.685
    sb07_14_1         2.731    0.076   36.079    0.000    2.731    1.999

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
    d_sth_1           0.015    0.026    0.574    0.566    1.000    1.000
   .b05_05_ (res1)    1.732    0.071   24.280    0.000    1.732    1.000
   .b05_20_ (res2)    1.087    0.085   12.848    0.000    1.087    1.000
   .b05_35_ (res3)    0.993    0.075   13.189    0.000    0.993    1.000
   .b05_50_ (res4)    1.704    0.089   19.045    0.000    1.704    1.000
   .b05_05_ (res1)    1.732    0.071   24.280    0.000    1.732    0.988
   .b05_20_ (res2)    1.087    0.085   12.848    0.000    1.087    0.818
   .b05_35_ (res3)    0.993    0.075   13.189    0.000    0.993    0.785
   .b05_50_ (res4)    1.704    0.089   19.045    0.000    1.704    0.852
    s07_14_           1.866    0.089   21.060    0.000    1.866    1.000
    asth_t1           0.000                                 NaN      NaN
# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
331 21 9043.002 9122.847 0.653 0.181 0.206
# parameters of interest
params_lcs_aesth_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.000 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.837 NA NA
d_aesth_1 ~1 0.006 -0.015 0.027 0.048 0.536 0.592
aesth_t1 ~1 2.976 2.861 3.091 Inf 50.612 0.000
d_aesth_1 ~~ d_aesth_1 0.015 -0.036 0.066 1.000 0.574 0.566
aesth_t1 ~~ d_aesth_1 0.003 -0.007 0.013 Inf 0.606 0.545
d_aesth_1 ~~ sb07_14_t1 0.030 -0.035 0.094 0.179 0.900 0.368
sb07_14_t1 ~~ sb07_14_t1 1.866 1.692 2.040 1.000 21.060 0.000

Correlation of specific, facet-level change goals with aesthetic change score (current-self) is not significantly different from zero, r = 0.179, p = 0.368.

6.4.2.56 Aesthetic - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9109.274 9195.252 1 0 0.042
# parameters of interest
params_lcs_aesth_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.940 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.592 NA NA
d_aesth_1 ~1 -0.007 -0.021 0.007 -0.094 -1.004 0.315
aesth_t1 ~1 3.107 2.982 3.231 25.578 49.021 0.000
d_aesth_1 ~~ d_aesth_1 0.006 -0.006 0.018 1.000 0.953 0.341
aesth_t1 ~~ d_aesth_1 -0.002 -0.006 0.002 -0.211 -0.873 0.383
d_aesth_1 ~~ sb07_14_t1 0.024 -0.008 0.056 0.232 1.488 0.137
sb07_14_t1 ~~ sb07_14_t1 1.864 1.700 2.028 1.000 22.299 0.000

Correlation of specific, facet-level change goals with aesthetic change score (ideal-self) is not significantly different from zero, r = 0.232, p = 0.137.

6.4.2.57 Imagination - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8564.273 8650.251 0.956 0.061 0.062
# parameters of interest
params_lcs_imagi_curr_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.969 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.473 NA NA
d_imagi_1 ~1 0.099 0.034 0.163 0.279 2.994 0.003
imagi_t1 ~1 3.567 3.470 3.665 4.930 71.862 0.000
d_imagi_1 ~~ d_imagi_1 0.125 0.043 0.206 1.000 2.989 0.003
imagi_t1 ~~ d_imagi_1 -0.045 -0.112 0.021 -0.177 -1.330 0.183
d_imagi_1 ~~ sb06_01_t1 0.011 -0.052 0.074 0.032 0.348 0.728
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.192 0.000
sb06_01_t1 ~1 3.110 3.007 3.213 3.142 59.211 0.000

Correlation of general change goal with imagination change score (current-self) is not significantly different from zero, r = 0.032, p = 0.728.

6.4.2.58 Imagination - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8003.379 8089.357 0.932 0.053 0.054
# parameters of interest
params_lcs_imagi_ideal_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.120 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.961 NA NA
d_imagi_1 ~1 0.021 -0.044 0.086 0.048 0.623 0.533
imagi_t1 ~1 4.563 4.496 4.630 9.129 133.420 0.000
d_imagi_1 ~~ d_imagi_1 0.184 0.051 0.316 1.000 2.715 0.007
imagi_t1 ~~ d_imagi_1 -0.117 -0.224 -0.011 -0.547 -2.153 0.031
d_imagi_1 ~~ sb06_01_t1 0.015 -0.044 0.074 0.036 0.509 0.611
sb06_01_t1 ~~ sb06_01_t1 0.980 0.844 1.115 1.000 14.191 0.000
sb06_01_t1 ~1 3.110 3.007 3.212 3.142 59.282 0.000

Correlation of general change goal with imagination change score (ideal-self) is not significantly different from zero, r = 0.036, p = 0.611.

6.4.2.59 Imagination - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8810.987 8896.964 0.926 0.08 0.09
# parameters of interest
params_lcs_imagi_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.964 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.467 NA NA
d_imagi_1 ~1 0.099 0.034 0.164 0.282 3.002 0.003
imagi_t1 ~1 3.567 3.470 3.665 4.928 71.846 0.000
d_imagi_1 ~~ d_imagi_1 0.123 0.042 0.204 1.000 2.968 0.003
imagi_t1 ~~ d_imagi_1 -0.042 -0.108 0.024 -0.164 -1.237 0.216
d_imagi_1 ~~ sb07_15_t1 0.034 -0.056 0.124 0.069 0.740 0.459
sb07_15_t1 ~~ sb07_15_t1 1.981 1.806 2.156 1.000 22.165 0.000

Correlation of specific, facet-level change goals with imagination change score (current-self) is not significantly different from zero, r = 0.069, p = 0.459.

6.4.2.60 Imagination - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8250.768 8336.745 0.926 0.055 0.058
# parameters of interest
params_lcs_imagi_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.119 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.957 NA NA
d_imagi_1 ~1 0.021 -0.044 0.086 0.048 0.621 0.534
imagi_t1 ~1 4.563 4.496 4.630 9.149 133.711 0.000
d_imagi_1 ~~ d_imagi_1 0.182 0.051 0.313 1.000 2.729 0.006
imagi_t1 ~~ d_imagi_1 -0.116 -0.222 -0.010 -0.546 -2.151 0.031
d_imagi_1 ~~ sb07_15_t1 -0.011 -0.088 0.066 -0.019 -0.288 0.774
sb07_15_t1 ~~ sb07_15_t1 1.981 1.806 2.156 1.000 22.166 0.000

Correlation of specific, facet-level change goals with imagination change score (ideal-self) is not significantly different from zero, r = -0.019, p = 0.774.

6.4.3 Hyp 4: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp4 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general 0.064 0.187 2.423 0.015
extraversion ideal general 0.060 0.203 2.245 0.025
extraversion current specific 0.010 0.048 0.458 0.647
extraversion ideal specific 0.032 0.173 0.948 0.343
agreeableness current general -0.014 -0.064 -0.805 0.421
agreeableness ideal general 0.016 0.058 0.742 0.458
agreeableness current specific 0.005 0.028 0.303 0.762
agreeableness ideal specific -0.028 -0.113 -1.368 0.171
conscientiousness current general 0.007 0.021 0.311 0.756
conscientiousness ideal general 0.010 0.032 0.444 0.657
conscientiousness current specific -0.028 -0.068 -0.832 0.405
conscientiousness ideal specific -0.009 -0.024 -0.343 0.732
neuroticism current general -0.045 -0.092 -1.514 0.130
neuroticism ideal general -0.029 -0.090 -1.267 0.205
neuroticism current specific 0.121 0.213 2.591 0.010
neuroticism ideal specific 0.002 0.006 0.083 0.934
openness current general -0.013 -0.068 -0.717 0.474
openness ideal general -0.014 -0.058 -0.622 0.534
openness current specific 0.026 0.225 2.242 0.025
openness ideal specific 0.020 0.129 1.386 0.166

Three covariances/correlations that significantly differ from zero:
- Changes in current-level and ideal-level extraversion covary with the general change goal.
- Changes in current-level neuroticism covary with the specific trait goals (latent factor of the three N facets).
- Changes in current-level openness covary with the specific trait goals (latent factor of the three O facets).

Results summary across the Big Five facets: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general 0.088 0.180 2.159 0.031
sociability ideal general 0.047 0.207 1.727 0.084
sociability current specific -0.045 -0.077 -0.970 0.332
sociability ideal specific 0.067 0.238 2.111 0.035
assertiveness current general 0.034 0.147 1.136 0.256
assertiveness ideal general 0.050 0.248 2.400 0.016
assertiveness current specific 0.013 0.047 0.428 0.668
assertiveness ideal specific 0.015 0.062 0.692 0.489
energy current general -0.018 -0.087 -0.933 0.351
energy ideal general -0.036 -0.146 -1.440 0.150
energy current specific 0.025 0.096 1.127 0.260
energy ideal specific 0.025 0.082 0.818 0.413
compassion current general 0.038 0.172 1.390 0.165
compassion ideal general 0.024 0.058 0.580 0.562
compassion current specific -0.004 -0.014 -0.095 0.924
compassion ideal specific -0.034 -0.058 -0.588 0.556
respectfulness current general -0.035 -0.122 -1.351 0.177
respectfulness ideal general 0.007 0.031 0.341 0.733
respectfulness current specific 0.011 0.030 0.304 0.761
respectfulness ideal specific -0.057 -0.173 -1.971 0.049
trust current general -0.006 -0.021 -0.213 0.832
trust ideal general -0.016 -0.070 -0.697 0.486
trust current specific -0.003 -0.007 -0.071 0.944
trust ideal specific 0.018 0.057 0.573 0.566
organization current general -0.074 -0.157 -1.822 0.068
organization ideal general -0.016 -0.053 -0.577 0.564
organization current specific 0.103 0.145 1.492 0.136
organization ideal specific 0.050 0.113 1.256 0.209
productiveness current general 0.023 0.066 0.739 0.460
productiveness ideal general 0.009 0.036 0.381 0.703
productiveness current specific 0.052 0.114 1.233 0.218
productiveness ideal specific 0.003 0.010 0.122 0.903
responsibility current general -0.038 -0.187 -1.757 0.079
responsibility ideal general 0.019 0.074 0.700 0.484
responsibility current specific -0.061 -0.194 -1.826 0.068
responsibility ideal specific 0.010 0.026 0.252 0.801
anxiety current general 0.070 0.136 1.763 0.078
anxiety ideal general 0.003 0.018 0.185 0.853
anxiety current specific -0.233 -0.287 -3.083 0.002
anxiety ideal specific 0.010 0.037 0.454 0.650
depression current general 0.025 0.070 0.956 0.339
depression ideal general 0.035 0.124 1.401 0.161
depression current specific -0.182 -0.311 -3.059 0.002
depression ideal specific -0.032 -0.071 -0.978 0.328
volatility current general 0.012 0.026 0.308 0.758
volatility ideal general -0.068 -0.231 -2.172 0.030
volatility current specific 0.017 0.028 0.321 0.748
volatility ideal specific -0.005 -0.012 -0.123 0.902
curiosity current general -0.002 -0.010 -0.070 0.944
curiosity ideal general 0.009 0.358 0.368 0.713
curiosity current specific -0.028 -0.116 -0.790 0.429
curiosity ideal specific 0.005 0.232 0.166 0.868
aesthetic current general -0.002 -0.082 -0.927 0.354
aesthetic ideal general -0.005 -0.073 -0.725 0.469
aesthetic current specific 0.002 0.144 1.940 0.052
aesthetic ideal specific 0.024 0.237 1.488 0.137
imagination current general 0.011 0.033 0.348 0.728
imagination ideal general 0.015 0.043 0.509 0.611
imagination current specific 0.034 0.070 0.740 0.459
imagination ideal specific -0.011 -0.022 -0.288 0.774

Looking at the facets, we see five covariances that significantly differ from zero:
- For sociability, changes in the current-level covary with the general change goal and changes in the ideal-level with the specific facet change goal (both effects barely significant).
- For assertiveness, changes in the ideal-level covary with the general change goal. - Matching the effects from neuroticism above, we find that changes in current-level anxiety and depression covary with the respective specific facet change goal. Changes in ideal-level volatility covary with the general change goal.
- Further, changes in ideal-level respectfulness covary with the specific facet change goal (small effect that is barely significant; in the right direction, though -> minus sign is because a reverse-keyed item was used as reference indicator).

Prepare data frame for plotting:

Show the code
df_table_hyp4_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp4_plot <- df_table_hyp4_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general change goal
  • specific = specific, facet-level change goal(s)
Show the code
ggplot(df_table_hyp4_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.5 H5: Acceptance goals and change in personality (current / ideal) in self-acceptance group

In the self-acceptance group, there will be a correlation between acceptance goals and change in ideal-self ratings but not change in current-self ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sa <- df_sbsa %>% 
  filter(rando=="Self-Acceptance") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07")), # facet-specific change goals
         sa06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sa07"), sa06_01)) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, sa06_01_t2))
# colnames(df_sbsa_wide_pers_sa)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sa <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sa)

6.5.1 Big Five traits

6.5.1.1 Extraversion - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp5 <- lavaan(mi_lcs_extra_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4616.434 4685.722 0.991 0.046 0.037
# parameters of interest
params_lcs_extra_curr_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                     "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.035 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.554 NA NA
d_extra_1 ~1 0.168 0.113 0.223 0.460 5.955 0.000
extra_t1 ~1 2.761 2.679 2.843 4.041 65.674 0.000
d_extra_1 ~~ d_extra_1 0.134 0.081 0.186 1.000 4.989 0.000
extra_t1 ~~ d_extra_1 -0.082 -0.125 -0.040 -0.329 -3.809 0.000
d_extra_1 ~~ sa06_01_t1 0.062 0.024 0.099 0.182 3.212 0.001
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.190 0.000
sa06_01_t1 ~1 4.222 4.124 4.321 4.562 84.137 0.000

The correlation of general acceptance goal with the extraversion change score (current-self) is significantly different from zero, r = 0.182, p = 0.001.

6.5.1.2 Extraversion - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp5 <- lavaan(mi_lcs_extra_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4054.114 4123.402 0.982 0.04 0.042
# parameters of interest
params_lcs_extra_ideal_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.073 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.909 NA NA
d_extra_1 ~1 -0.037 -0.096 0.022 -0.093 -1.230 0.219
extra_t1 ~1 3.713 3.651 3.775 7.927 118.212 0.000
d_extra_1 ~~ d_extra_1 0.157 0.085 0.229 1.000 4.288 0.000
extra_t1 ~~ d_extra_1 -0.093 -0.142 -0.044 -0.501 -3.739 0.000
d_extra_1 ~~ sa06_01_t1 0.024 -0.018 0.067 0.066 1.114 0.265
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 84.000 0.000

Correlation of general acceptance goal with extraversion change score (ideal-self) is not significantly different from zero, r = 0.066, p = 0.265.

6.5.1.3 Extraversion - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp5 <- lavaan(mi_lcs_extra_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 7169.184 7265.417 0.908 0.119 0.183
# parameters of interest
params_lcs_extra_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.034 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.552 NA NA
d_extra_1 ~1 0.167 0.112 0.222 0.459 5.934 0.000
extra_t1 ~1 2.761 2.679 2.843 4.047 65.718 0.000
d_extra_1 ~~ d_extra_1 0.133 0.081 0.184 1.000 5.028 0.000
extra_t1 ~~ d_extra_1 -0.081 -0.129 -0.034 -0.327 -3.360 0.001
goals ~~ d_extra_1 0.017 -0.050 0.083 0.049 0.496 0.620
goals ~~ goals 0.871 0.469 1.274 1.000 4.240 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (current-self) is not significantly different from zero, r = 0.049, p = 0.62.

6.5.1.4 Extraversion - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp5 <- lavaan(mi_lcs_extra_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 6599.694 6695.927 0.982 0.034 0.041
# parameters of interest
params_lcs_extra_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.070 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.902 NA NA
d_extra_1 ~1 -0.038 -0.097 0.021 -0.096 -1.262 0.207
extra_t1 ~1 3.713 3.652 3.775 7.938 118.226 0.000
d_extra_1 ~~ d_extra_1 0.155 0.085 0.226 1.000 4.315 0.000
extra_t1 ~~ d_extra_1 -0.092 -0.140 -0.044 -0.496 -3.736 0.000
goals ~~ d_extra_1 -0.031 -0.097 0.036 -0.085 -0.905 0.365
goals ~~ goals 0.847 0.450 1.243 1.000 4.189 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (ideal-self) is not significantly different from zero, r = -0.085, p = 0.365.

6.5.1.5 Agreeableness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp5 <- lavaan(mi_lcs_agree_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4056.968 4126.256 0.971 0.063 0.066
# parameters of interest
params_lcs_agree_curr_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                     "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.034 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.563 NA NA
d_agree_1 ~1 0.043 0.007 0.079 0.198 2.363 0.018
agree_t1 ~1 3.331 3.266 3.396 8.365 101.075 0.000
d_agree_1 ~~ d_agree_1 0.047 0.009 0.085 1.000 2.434 0.015
agree_t1 ~~ d_agree_1 -0.029 -0.060 0.003 -0.331 -1.795 0.073
d_agree_1 ~~ sa06_01_t1 0.027 -0.008 0.063 0.137 1.520 0.129
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 84.002 0.000

Correlation of general acceptance goal with agreeableness change score (current-self) is not significantly different from zero, r = 0.137, p = 0.129.

6.5.1.6 Agreeableness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp5 <- lavaan(mi_lcs_agree_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4069.367 4138.655 0.973 0.066 0.071
# parameters of interest
params_lcs_agree_ideal_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.998 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.688 NA NA
d_agree_1 ~1 -0.012 -0.057 0.034 -0.036 -0.505 0.614
agree_t1 ~1 3.705 3.632 3.779 7.961 98.659 0.000
d_agree_1 ~~ d_agree_1 0.103 0.063 0.143 1.000 5.004 0.000
agree_t1 ~~ d_agree_1 -0.051 -0.082 -0.020 -0.342 -3.223 0.001
d_agree_1 ~~ sa06_01_t1 0.024 -0.014 0.061 0.079 1.219 0.223
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.122 4.319 4.560 83.957 0.000

Correlation of general acceptance goal with agreeableness change score (ideal-self) is not significantly different from zero, r = 0.079, p = 0.223.

6.5.1.7 Agreeableness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp5 <- lavaan(mi_lcs_agree_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 6436.356 6532.589 0.951 0.07 0.087
# parameters of interest
params_lcs_agree_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.012 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.537 NA NA
d_agree_1 ~1 0.043 0.007 0.078 0.201 2.339 0.019
agree_t1 ~1 3.331 3.266 3.396 8.333 101.004 0.000
d_agree_1 ~~ d_agree_1 0.045 0.009 0.081 1.000 2.472 0.013
agree_t1 ~~ d_agree_1 -0.024 -0.054 0.005 -0.288 -1.621 0.105
goals ~~ d_agree_1 0.005 -0.027 0.037 0.033 0.322 0.748
goals ~~ goals 0.550 0.292 0.808 1.000 4.173 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (current-self) is not significantly different from zero, r = 0.033, p = 0.748.

6.5.1.8 Agreeableness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp5 <- lavaan(mi_lcs_agree_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 6447.067 6543.3 0.99 0.033 0.041
# parameters of interest
params_lcs_agree_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.987 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.673 NA NA
d_agree_1 ~1 -0.012 -0.057 0.034 -0.037 -0.508 0.612
agree_t1 ~1 3.705 3.631 3.779 7.926 98.587 0.000
d_agree_1 ~~ d_agree_1 0.102 0.062 0.141 1.000 5.002 0.000
agree_t1 ~~ d_agree_1 -0.048 -0.078 -0.018 -0.321 -3.134 0.002
goals ~~ d_agree_1 0.008 -0.032 0.047 0.033 0.383 0.701
goals ~~ goals 0.540 0.267 0.813 1.000 3.874 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (ideal-self) is not significantly different from zero, r = 0.033, p = 0.701.

6.5.1.9 Conscientiousness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp5 <- lavaan(mi_lcs_consc_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4342.361 4411.648 0.991 0.051 0.024
# parameters of interest
params_lcs_consc_curr_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                     "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.008 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.475 NA NA
d_consc_1 ~1 0.154 0.105 0.202 0.438 6.228 0.000
consc_t1 ~1 3.503 3.415 3.591 4.699 77.897 0.000
d_consc_1 ~~ d_consc_1 0.123 0.074 0.173 1.000 4.909 0.000
consc_t1 ~~ d_consc_1 -0.066 -0.111 -0.021 -0.252 -2.894 0.004
d_consc_1 ~~ sa06_01_t1 0.020 -0.018 0.057 0.060 1.025 0.305
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.222 4.123 4.320 4.561 83.908 0.000

Correlation of general acceptance goal with conscientiousness change score (current-self) is not significantly different from zero, r = 0.06, p = 0.305.

6.5.1.10 Conscientiousness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp5 <- lavaan(mi_lcs_consc_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 3671.897 3741.185 0.985 0.045 0.058
# parameters of interest
params_lcs_consc_ideal_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.044 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.736 NA NA
d_consc_1 ~1 0.018 -0.031 0.066 0.051 0.706 0.480
consc_t1 ~1 4.377 4.319 4.435 8.935 148.541 0.000
d_consc_1 ~~ d_consc_1 0.119 0.058 0.181 1.000 3.783 0.000
consc_t1 ~~ d_consc_1 -0.070 -0.133 -0.006 -0.411 -2.152 0.031
d_consc_1 ~~ sa06_01_t1 -0.006 -0.043 0.030 -0.020 -0.344 0.731
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 84.038 0.000

Correlation of general acceptance goal with conscientiousness change score (ideal-self) is not significantly different from zero, r = -0.02, p = 0.731.

6.5.1.11 Conscientiousness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp5 <- lavaan(mi_lcs_consc_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 6760.546 6856.779 0.911 0.142 0.251
# parameters of interest
params_lcs_consc_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.075 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.546 NA NA
d_consc_1 ~1 0.152 0.104 0.201 0.401 6.164 0.000
consc_t1 ~1 3.503 3.415 3.592 4.691 77.881 0.000
d_consc_1 ~~ d_consc_1 0.144 0.079 0.209 1.000 4.372 0.000
consc_t1 ~~ d_consc_1 -0.110 -0.172 -0.047 -0.387 -3.442 0.001
goals ~~ d_consc_1 -0.108 -0.190 -0.027 -0.256 -2.610 0.009
goals ~~ goals 1.247 0.945 1.548 1.000 8.109 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (current-self) is significantly different from zero, r = -0.256, p = 0.009.

6.5.1.12 Conscientiousness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp5 <- lavaan(mi_lcs_consc_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 6096.405 6192.639 0.995 0.023 0.053
# parameters of interest
params_lcs_consc_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.050 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.746 NA NA
d_consc_1 ~1 0.017 -0.031 0.066 0.050 0.700 0.484
consc_t1 ~1 4.377 4.319 4.435 8.916 148.483 0.000
d_consc_1 ~~ d_consc_1 0.122 0.059 0.184 1.000 3.788 0.000
consc_t1 ~~ d_consc_1 -0.072 -0.135 -0.008 -0.421 -2.221 0.026
goals ~~ d_consc_1 -0.032 -0.080 0.016 -0.083 -1.310 0.190
goals ~~ goals 1.241 0.934 1.547 1.000 7.938 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (ideal-self) is not significantly different from zero, r = -0.083, p = 0.19.

6.5.1.13 Neuroticism - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp5 <- lavaan(mi_lcs_neuro_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4741.039 4810.327 0.982 0.07 0.087
# parameters of interest
params_lcs_neuro_curr_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                     "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.975 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.561 NA NA
d_neuro_1 ~1 -0.184 -0.242 -0.125 -0.419 -6.184 0.000
neuro_t1 ~1 3.519 3.426 3.612 4.620 74.407 0.000
d_neuro_1 ~~ d_neuro_1 0.192 0.132 0.252 1.000 6.242 0.000
neuro_t1 ~~ d_neuro_1 -0.081 -0.136 -0.026 -0.243 -2.880 0.004
d_neuro_1 ~~ sa06_01_t1 -0.063 -0.117 -0.010 -0.157 -2.306 0.021
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.022 1.000 10.182 0.000
sa06_01_t1 ~1 4.223 4.125 4.321 4.561 84.184 0.000

Correlation of general acceptance goal with neuroticism change score (current-self) is significantly different from zero, r = -0.157, p = 0.021.

6.5.1.14 Neuroticism - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp5 <- lavaan(mi_lcs_neuro_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 3758.694 3827.982 0.977 0.049 0.053
# parameters of interest
params_lcs_neuro_ideal_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.939 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.783 NA NA
d_neuro_1 ~1 0.011 -0.038 0.059 0.033 0.431 0.666
neuro_t1 ~1 1.646 1.595 1.697 4.212 63.180 0.000
d_neuro_1 ~~ d_neuro_1 0.106 0.056 0.156 1.000 4.155 0.000
neuro_t1 ~~ d_neuro_1 -0.043 -0.072 -0.014 -0.337 -2.900 0.004
d_neuro_1 ~~ sa06_01_t1 -0.013 -0.048 0.022 -0.043 -0.728 0.467
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.190 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.992 0.000

Correlation of general acceptance goal with neuroticism change score (ideal-self) is not significantly different from zero, r = -0.043, p = 0.467.

6.5.1.15 Neuroticism - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp5 <- lavaan(mi_lcs_neuro_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 7235.992 7332.225 0.959 0.087 0.146
# parameters of interest
params_lcs_neuro_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.002 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.590 NA NA
d_neuro_1 ~1 -0.182 -0.240 -0.124 -0.406 -6.157 0.000
neuro_t1 ~1 3.519 3.426 3.612 4.620 74.388 0.000
d_neuro_1 ~~ d_neuro_1 0.201 0.136 0.266 1.000 6.044 0.000
neuro_t1 ~~ d_neuro_1 -0.102 -0.162 -0.042 -0.298 -3.339 0.001
goals ~~ d_neuro_1 0.020 -0.041 0.081 0.053 0.650 0.516
goals ~~ goals 0.722 0.324 1.121 1.000 3.551 0.000

Correlation of specific, facet-level acceptance goals with neuroticism change score (current-self) is not significantly different from zero, r = 0.053, p = 0.516.

6.5.1.16 Neuroticism - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp5 <- lavaan(mi_lcs_neuro_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 6245.283 6341.516 0.972 0.047 0.049
# parameters of interest
params_lcs_neuro_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.939 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.780 NA NA
d_neuro_1 ~1 0.011 -0.037 0.059 0.034 0.445 0.656
neuro_t1 ~1 1.646 1.595 1.697 4.229 63.227 0.000
d_neuro_1 ~~ d_neuro_1 0.105 0.056 0.153 1.000 4.209 0.000
neuro_t1 ~~ d_neuro_1 -0.042 -0.070 -0.014 -0.335 -2.932 0.003
goals ~~ d_neuro_1 0.036 0.006 0.066 0.140 2.319 0.020
goals ~~ goals 0.633 0.178 1.089 1.000 2.725 0.006

The correlation of specific, facet-level acceptance goals with the neuroticism change score (ideal-self) is significantly different from zero, r = 0.14, p = 0.02.

6.5.1.17 Openness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp5 <- lavaan(mi_lcs_openn_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4328.66 4397.948 0.998 0.017 0.028
# parameters of interest
params_lcs_openn_curr_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                     "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.057 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.599 NA NA
d_openn_1 ~1 0.075 0.031 0.119 0.247 3.307 0.001
openn_t1 ~1 3.474 3.399 3.549 6.490 91.037 0.000
d_openn_1 ~~ d_openn_1 0.092 0.055 0.129 1.000 4.894 0.000
openn_t1 ~~ d_openn_1 -0.061 -0.092 -0.030 -0.376 -3.912 0.000
d_openn_1 ~~ sa06_01_t1 0.025 -0.011 0.062 0.090 1.354 0.176
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.022 1.000 10.192 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.560 83.978 0.000

Correlation of general acceptance goal with openness change score (current-self) is not significantly different from zero, r = 0.09, p = 0.176.

6.5.1.18 Openness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp5 <- lavaan(mi_lcs_openn_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing="fiml")
summary(fit_mi_lcs_openn_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4063.3 4132.588 0.965 0.064 0.057
# parameters of interest
params_lcs_openn_ideal_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.967 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.639 NA NA
d_openn_1 ~1 -0.013 -0.053 0.027 -0.056 -0.646 0.519
openn_t1 ~1 3.811 3.752 3.870 10.661 126.436 0.000
d_openn_1 ~~ d_openn_1 0.056 0.029 0.083 1.000 4.028 0.000
openn_t1 ~~ d_openn_1 -0.023 -0.040 -0.007 -0.278 -2.764 0.006
d_openn_1 ~~ sa06_01_t1 0.001 -0.030 0.033 0.007 0.088 0.930
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.969 0.000

Correlation of general acceptance goal with openness change score (ideal-self) is significantly different from zero, r = 0.007, p = 0.93.

6.5.1.19 Openness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp5 <- lavaan(mi_lcs_openn_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')

summary(fit_mi_lcs_openn_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 6661.93 6758.163 0.962 0.073 0.148
# parameters of interest
params_lcs_openn_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.065 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.608 NA NA
d_openn_1 ~1 0.075 0.031 0.120 0.245 3.306 0.001
openn_t1 ~1 3.474 3.399 3.549 6.466 90.990 0.000
d_openn_1 ~~ d_openn_1 0.094 0.056 0.132 1.000 4.792 0.000
openn_t1 ~~ d_openn_1 -0.064 -0.097 -0.032 -0.390 -3.855 0.000
goals ~~ d_openn_1 -0.014 -0.049 0.022 -0.059 -0.747 0.455
goals ~~ goals 0.561 0.338 0.783 1.000 4.945 0.000

Correlation of specific, facet-level acceptance goals with openness change score (current-self) is not significantly different from zero, r = -0.059, p = 0.455.

6.5.1.20 Openness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp5 <- lavaan(mi_lcs_openn_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing = "fiml")
summary(fit_mi_lcs_openn_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 6395.366 6491.599 0.986 0.038 0.052
# parameters of interest
params_lcs_openn_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.967 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.639 NA NA
d_openn_1 ~1 -0.013 -0.053 0.026 -0.056 -0.656 0.512
openn_t1 ~1 3.811 3.752 3.870 10.656 126.434 0.000
d_openn_1 ~~ d_openn_1 0.056 0.028 0.083 1.000 3.988 0.000
openn_t1 ~~ d_openn_1 -0.024 -0.040 -0.007 -0.279 -2.788 0.005
goals ~~ d_openn_1 -0.003 -0.032 0.026 -0.016 -0.193 0.847
goals ~~ goals 0.560 0.338 0.782 1.000 4.940 0.000

The correlation of specific, facet-level acceptance goals with the openness change score (ideal-self) is not significantly different from zero, r = -0.016, p = 0.847.

6.5.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with acceptance goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sa06_01_t1 & sa07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sa06_01_t1"
      } else{
        goal_op = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), facet_model_fit))
      }
    }
  }
}  
6.5.2.1 Sociability - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8149.317 8234.002 0.974 0.058 0.048
# parameters of interest
params_lcs_socia_curr_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.013 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.423 NA NA
d_socia_1 ~1 0.175 0.104 0.245 0.475 4.859 0.000
socia_t1 ~1 2.825 2.693 2.956 3.206 42.175 0.000
d_socia_1 ~~ d_socia_1 0.135 0.065 0.205 1.000 3.788 0.000
socia_t1 ~~ d_socia_1 -0.077 -0.142 -0.012 -0.238 -2.334 0.020
d_socia_1 ~~ sa06_01_t1 0.089 0.035 0.142 0.260 3.243 0.001
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.022 1.000 10.190 0.000
sa06_01_t1 ~1 4.219 4.120 4.318 4.558 83.631 0.000

The correlation of the general acceptance goal with the sociability change score (current-self) is significantly different from zero, r = 0.26, p = 0.001.

6.5.2.2 Sociability - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8056.518 8141.204 0.966 0.04 0.048
# parameters of interest
params_lcs_socia_ideal_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.048 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.745 NA NA
d_socia_1 ~1 -0.058 -0.107 -0.009 -0.230 -2.342 0.019
socia_t1 ~1 4.321 4.250 4.393 12.165 118.382 0.000
d_socia_1 ~~ d_socia_1 0.064 0.018 0.110 1.000 2.714 0.007
socia_t1 ~~ d_socia_1 -0.037 -0.063 -0.012 -0.418 -2.930 0.003
d_socia_1 ~~ sa06_01_t1 -0.013 -0.045 0.020 -0.054 -0.767 0.443
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.190 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.949 0.000

Correlation of general acceptance goal with sociability change score (ideal-self) is not significantly different from zero, r = -0.054, p = 0.443.

6.5.2.3 Sociability - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8430.179 8514.864 0.918 0.107 0.141
# parameters of interest
params_lcs_socia_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.023 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.434 NA NA
d_socia_1 ~1 0.172 0.102 0.242 0.463 4.806 0.000
socia_t1 ~1 2.826 2.694 2.957 3.225 42.204 0.000
d_socia_1 ~~ d_socia_1 0.138 0.068 0.207 1.000 3.883 0.000
socia_t1 ~~ d_socia_1 -0.086 -0.157 -0.015 -0.265 -2.377 0.017
d_socia_1 ~~ sa07_01_t1 0.002 -0.089 0.093 0.004 0.039 0.969
sa07_01_t1 ~~ sa07_01_t1 1.904 1.711 2.098 1.000 19.269 0.000

Correlation of specific, facet-level acceptance goals with sociability change score (current-self) is not significantly different from zero, r = 0.004, p = 0.969.

6.5.2.4 Sociability - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8327.682 8412.367 0.953 0.047 0.051
# parameters of interest
params_lcs_socia_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.047 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.743 NA NA
d_socia_1 ~1 -0.058 -0.107 -0.009 -0.229 -2.330 0.020
socia_t1 ~1 4.321 4.250 4.393 12.038 118.246 0.000
d_socia_1 ~~ d_socia_1 0.065 0.018 0.112 1.000 2.691 0.007
socia_t1 ~~ d_socia_1 -0.038 -0.063 -0.013 -0.416 -2.944 0.003
d_socia_1 ~~ sa07_01_t1 -0.009 -0.074 0.057 -0.025 -0.262 0.793
sa07_01_t1 ~~ sa07_01_t1 1.904 1.711 2.098 1.000 19.269 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal-self) is not significantly different from zero, r = -0.025, p = 0.793.

6.5.2.5 Assertiveness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8530.433 8615.119 0.979 0.044 0.043
# parameters of interest
params_lcs_asser_curr_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.027 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.559 NA NA
d_asser_1 ~1 0.083 0.026 0.141 0.235 2.826 0.005
asser_t1 ~1 3.132 3.019 3.245 4.798 54.210 0.000
d_asser_1 ~~ d_asser_1 0.126 0.067 0.185 1.000 4.169 0.000
asser_t1 ~~ d_asser_1 -0.074 -0.120 -0.028 -0.320 -3.162 0.002
d_asser_1 ~~ sa06_01_t1 0.056 0.011 0.102 0.171 2.425 0.015
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.022 1.000 10.184 0.000
sa06_01_t1 ~1 4.224 4.126 4.322 4.562 84.289 0.000

Correlation of general acceptance goal with assertiveness change score (current-self) is significantly different from zero, r = 0.171, p = 0.015.

6.5.2.6 Assertiveness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8314.873 8399.558 0.99 0.021 0.039
# parameters of interest
params_lcs_asser_ideal_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.015 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.754 NA NA
d_asser_1 ~1 -0.034 -0.071 0.003 -0.167 -1.790 0.074
asser_t1 ~1 4.163 4.072 4.254 15.355 89.784 0.000
d_asser_1 ~~ d_asser_1 0.041 0.003 0.078 1.000 2.137 0.033
asser_t1 ~~ d_asser_1 -0.021 -0.044 0.001 -0.391 -1.849 0.064
d_asser_1 ~~ sa06_01_t1 0.015 -0.014 0.044 0.082 1.023 0.306
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 84.000 0.000

Correlation of general acceptance goal with assertiveness change score (ideal-self) is not significantly different from zero, r = 0.082, p = 0.306.

6.5.2.7 Assertiveness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8806.119 8890.804 0.919 0.088 0.103
# parameters of interest
params_lcs_asser_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.036 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.569 NA NA
d_asser_1 ~1 0.084 0.025 0.142 0.231 2.793 0.005
asser_t1 ~1 3.132 3.018 3.245 4.759 54.144 0.000
d_asser_1 ~~ d_asser_1 0.131 0.068 0.194 1.000 4.098 0.000
asser_t1 ~~ d_asser_1 -0.080 -0.131 -0.029 -0.336 -3.052 0.002
d_asser_1 ~~ sa07_02_t1 -0.010 -0.091 0.070 -0.021 -0.253 0.800
sa07_02_t1 ~~ sa07_02_t1 1.902 1.715 2.089 1.000 19.964 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (current-self) is not significantly different from zero, r = -0.021, p = 0.8.

6.5.2.8 Assertiveness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8585.39 8670.075 0.996 0.013 0.037
# parameters of interest
params_lcs_asser_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.008 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.742 NA NA
d_asser_1 ~1 -0.034 -0.071 0.003 -0.169 -1.789 0.074
asser_t1 ~1 4.163 4.072 4.254 15.223 89.911 0.000
d_asser_1 ~~ d_asser_1 0.041 0.004 0.077 1.000 2.154 0.031
asser_t1 ~~ d_asser_1 -0.021 -0.043 0.002 -0.379 -1.820 0.069
d_asser_1 ~~ sa07_02_t1 -0.021 -0.069 0.026 -0.077 -0.893 0.372
sa07_02_t1 ~~ sa07_02_t1 1.902 1.715 2.088 1.000 19.966 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (ideal-self) is not significantly different from zero, r = -0.077, p = 0.372.

6.5.2.9 Energy - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8600.005 8684.69 0.961 0.057 0.053
# parameters of interest
params_lcs_energ_curr_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.037 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.665 NA NA
d_energ_1 ~1 -0.107 -0.166 -0.048 -0.334 -3.532 0.000
energ_t1 ~1 2.686 2.581 2.792 5.383 49.714 0.000
d_energ_1 ~~ d_energ_1 0.103 0.034 0.171 1.000 2.933 0.003
energ_t1 ~~ d_energ_1 -0.060 -0.103 -0.017 -0.375 -2.724 0.006
d_energ_1 ~~ sa06_01_t1 -0.019 -0.056 0.019 -0.063 -0.985 0.325
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.190 0.000
sa06_01_t1 ~1 4.222 4.123 4.320 4.561 83.964 0.000

Correlation of general acceptance goal with energy change score (current-self) is not significantly different from zero, r = -0.063, p = 0.325.

6.5.2.10 Energy - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7672.832 7757.517 0.909 0.05 0.062
# parameters of interest
params_lcs_energ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.109 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.941 NA NA
d_energ_1 ~1 -0.013 -0.059 0.034 -0.053 -0.544 0.587
energ_t1 ~1 2.392 2.276 2.508 8.392 40.361 0.000
d_energ_1 ~~ d_energ_1 0.058 -0.033 0.150 1.000 1.246 0.213
energ_t1 ~~ d_energ_1 -0.037 -0.102 0.029 -0.534 -1.102 0.271
d_energ_1 ~~ sa06_01_t1 -0.028 -0.064 0.008 -0.124 -1.512 0.130
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.190 0.000
sa06_01_t1 ~1 4.222 4.123 4.320 4.562 84.030 0.000

Correlation of general acceptance goal with energy change score (ideal-self) is not significantly different from zero, r = -0.124, p = 0.13.

6.5.2.11 Energy - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8878.247 8962.932 0.867 0.112 0.131
# parameters of interest
params_lcs_energ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.073 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.717 NA NA
d_energ_1 ~1 -0.106 -0.164 -0.047 -0.317 -3.521 0.000
energ_t1 ~1 2.686 2.580 2.792 5.394 49.755 0.000
d_energ_1 ~~ d_energ_1 0.111 0.036 0.185 1.000 2.902 0.004
energ_t1 ~~ d_energ_1 -0.072 -0.124 -0.020 -0.432 -2.696 0.007
d_energ_1 ~~ sa07_03_t1 0.054 -0.023 0.131 0.116 1.373 0.170
sa07_03_t1 ~~ sa07_03_t1 1.954 1.765 2.144 1.000 20.238 0.000

Correlation of specific, facet-level acceptance goals with energy change score (current-self) is not significantly different from zero, r = 0.116, p = 0.17.

6.5.2.12 Energy - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7952.582 8037.267 0.904 0.052 0.063
# parameters of interest
params_lcs_energ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.095 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.914 NA NA
d_energ_1 ~1 -0.011 -0.057 0.034 -0.049 -0.493 0.622
energ_t1 ~1 2.392 2.276 2.508 8.429 40.382 0.000
d_energ_1 ~~ d_energ_1 0.056 -0.031 0.143 1.000 1.257 0.209
energ_t1 ~~ d_energ_1 -0.035 -0.097 0.027 -0.517 -1.095 0.273
d_energ_1 ~~ sa07_03_t1 0.042 -0.016 0.099 0.126 1.420 0.156
sa07_03_t1 ~~ sa07_03_t1 1.954 1.765 2.144 1.000 20.239 0.000

Correlation of specific, facet-level acceptance goals with energy change score (ideal-self) is not significantly different from zero, r = 0.126, p = 0.156.

6.5.2.13 Compassion - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8500.155 8584.84 0.935 0.062 0.064
# parameters of interest
params_lcs_compa_curr_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.143 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.748 NA NA
d_compa_1 ~1 0.086 -0.004 0.175 0.162 1.873 0.061
compa_t1 ~1 4.135 4.034 4.236 5.114 80.387 0.000
d_compa_1 ~~ d_compa_1 0.280 0.085 0.475 1.000 2.813 0.005
compa_t1 ~~ d_compa_1 -0.217 -0.374 -0.060 -0.506 -2.705 0.007
d_compa_1 ~~ sa06_01_t1 0.060 -0.021 0.141 0.122 1.452 0.147
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.122 4.319 4.560 83.971 0.000

Correlation of general acceptance goal with compassion change score (current-self) is not significantly different from zero, r = 0.122, p = 0.147.

6.5.2.14 Compassion - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8700.684 8785.37 0.974 0.032 0.053
# parameters of interest
params_lcs_compa_ideal_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.020 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.592 NA NA
d_compa_1 ~1 -0.039 -0.110 0.032 -0.117 -1.082 0.279
compa_t1 ~1 4.255 4.163 4.347 7.356 90.728 0.000
d_compa_1 ~~ d_compa_1 0.113 0.003 0.222 1.000 2.020 0.043
compa_t1 ~~ d_compa_1 -0.063 -0.138 0.012 -0.324 -1.641 0.101
d_compa_1 ~~ sa06_01_t1 0.012 -0.047 0.071 0.039 0.402 0.688
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.986 0.000

Correlation of general acceptance goal with compassion change score (ideal-self) is not significantly different from zero, r = 0.039, p = 0.688.

6.5.2.15 Compassion - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8733.263 8817.948 0.927 0.066 0.068
# parameters of interest
params_lcs_compa_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.130 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.726 NA NA
d_compa_1 ~1 0.082 -0.005 0.170 0.161 1.837 0.066
compa_t1 ~1 4.136 4.036 4.236 5.205 80.767 0.000
d_compa_1 ~~ d_compa_1 0.261 0.082 0.439 1.000 2.860 0.004
compa_t1 ~~ d_compa_1 -0.199 -0.344 -0.054 -0.490 -2.688 0.007
d_compa_1 ~~ sa07_04_t1 -0.027 -0.117 0.064 -0.040 -0.574 0.566
sa07_04_t1 ~~ sa07_04_t1 1.690 1.511 1.870 1.000 18.465 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (current-self) is not significantly different from zero, r = -0.04, p = 0.566.

6.5.2.16 Compassion - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8926.681 9011.366 1 0 0.032
# parameters of interest
params_lcs_compa_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.020 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.594 NA NA
d_compa_1 ~1 -0.039 -0.110 0.032 -0.117 -1.085 0.278
compa_t1 ~1 4.255 4.163 4.347 7.382 90.696 0.000
d_compa_1 ~~ d_compa_1 0.113 0.004 0.221 1.000 2.039 0.041
compa_t1 ~~ d_compa_1 -0.063 -0.133 0.008 -0.324 -1.738 0.082
d_compa_1 ~~ sa07_04_t1 -0.088 -0.176 -0.001 -0.203 -1.988 0.047
sa07_04_t1 ~~ sa07_04_t1 1.690 1.511 1.870 1.000 18.464 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (ideal-self) is not significantly different from zero, r = -0.203, p = 0.047.

6.5.2.17 Respectfulness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7503.858 7588.543 0.938 0.07 0.062
# parameters of interest
params_lcs_respe_curr_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.020 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.601 NA NA
d_respe_1 ~1 0.055 0.009 0.102 0.199 2.318 0.020
respe_t1 ~1 4.436 4.365 4.506 9.393 122.932 0.000
d_respe_1 ~~ d_respe_1 0.077 0.029 0.125 1.000 3.163 0.002
respe_t1 ~~ d_respe_1 -0.043 -0.080 -0.006 -0.327 -2.258 0.024
d_respe_1 ~~ sa06_01_t1 0.012 -0.032 0.056 0.047 0.539 0.590
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.190 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.955 0.000

Correlation of general acceptance goal with respectfulness change score (current-self) is not significantly different from zero, r = 0.047, p = 0.59.

6.5.2.18 Respectfulness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 6977.448 7062.133 0.9 0.072 0.074
# parameters of interest
params_lcs_respe_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.959 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.673 NA NA
d_respe_1 ~1 0.007 -0.038 0.052 0.030 0.312 0.755
respe_t1 ~1 4.672 4.613 4.731 13.653 156.301 0.000
d_respe_1 ~~ d_respe_1 0.058 0.014 0.101 1.000 2.601 0.009
respe_t1 ~~ d_respe_1 -0.024 -0.057 0.010 -0.288 -1.389 0.165
d_respe_1 ~~ sa06_01_t1 0.011 -0.025 0.048 0.052 0.624 0.533
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.981 0.000

Correlation of general acceptance goal with respectfulness change score (ideal-self) is not significantly different from zero, r = 0.052, p = 0.533.

6.5.2.19 Respectfulness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7720.113 7804.798 0.906 0.088 0.099
# parameters of interest
params_lcs_respe_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.009 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.587 NA NA
d_respe_1 ~1 0.055 0.008 0.102 0.200 2.313 0.021
respe_t1 ~1 4.436 4.365 4.506 9.386 122.943 0.000
d_respe_1 ~~ d_respe_1 0.076 0.029 0.123 1.000 3.157 0.002
respe_t1 ~~ d_respe_1 -0.040 -0.078 -0.002 -0.307 -2.060 0.039
d_respe_1 ~~ sa07_05_t1 0.013 -0.052 0.078 0.037 0.388 0.698
sa07_05_t1 ~~ sa07_05_t1 1.620 1.354 1.887 1.000 11.923 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (current-self) is not significantly different from zero, r = 0.037, p = 0.698.

6.5.2.20 Respectfulness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7193.792 7278.477 0.925 0.061 0.063
# parameters of interest
params_lcs_respe_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.956 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.667 NA NA
d_respe_1 ~1 0.007 -0.038 0.052 0.030 0.309 0.758
respe_t1 ~1 4.672 4.613 4.731 13.634 156.255 0.000
d_respe_1 ~~ d_respe_1 0.057 0.014 0.100 1.000 2.588 0.010
respe_t1 ~~ d_respe_1 -0.023 -0.056 0.010 -0.281 -1.365 0.172
d_respe_1 ~~ sa07_05_t1 -0.009 -0.065 0.047 -0.030 -0.315 0.753
sa07_05_t1 ~~ sa07_05_t1 1.620 1.354 1.887 1.000 11.923 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (ideal-self) is not significantly different from zero, r = -0.03, p = 0.753.

6.5.2.21 Trust - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8634.336 8719.021 0.966 0.049 0.054
# parameters of interest
params_lcs_trust_curr_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.053 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.538 NA NA
d_trust_1 ~1 -0.083 -0.147 -0.019 -0.258 -2.532 0.011
trust_t1 ~1 2.894 2.779 3.009 4.611 49.273 0.000
d_trust_1 ~~ d_trust_1 0.103 0.004 0.202 1.000 2.035 0.042
trust_t1 ~~ d_trust_1 -0.071 -0.135 -0.007 -0.352 -2.170 0.030
d_trust_1 ~~ sa06_01_t1 -0.019 -0.070 0.032 -0.063 -0.717 0.473
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.971 0.000

Correlation of general acceptance goal with trust change score (current-self) is not significantly different from zero, r = -0.063, p = 0.473.

6.5.2.22 Trust - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8299.244 8383.929 0.936 0.056 0.058
# parameters of interest
params_lcs_trust_ideal_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.998 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.669 NA NA
d_trust_1 ~1 0.029 -0.025 0.084 0.100 1.050 0.294
trust_t1 ~1 1.905 1.811 1.999 4.346 39.623 0.000
d_trust_1 ~~ d_trust_1 0.086 0.032 0.141 1.000 3.091 0.002
trust_t1 ~~ d_trust_1 -0.043 -0.082 -0.003 -0.332 -2.127 0.033
d_trust_1 ~~ sa06_01_t1 -0.045 -0.091 0.002 -0.164 -1.867 0.062
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.022 1.000 10.190 0.000
sa06_01_t1 ~1 4.220 4.121 4.318 4.559 83.890 0.000

Correlation of general acceptance goal with trust change score (ideal-self) is not significantly different from zero, r = -0.164, p = 0.062.

6.5.2.23 Trust - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8909.551 8994.236 0.958 0.056 0.066
# parameters of interest
params_lcs_trust_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.057 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.546 NA NA
d_trust_1 ~1 -0.081 -0.144 -0.018 -0.252 -2.505 0.012
trust_t1 ~1 2.893 2.778 3.008 4.669 49.248 0.000
d_trust_1 ~~ d_trust_1 0.102 0.007 0.198 1.000 2.101 0.036
trust_t1 ~~ d_trust_1 -0.071 -0.133 -0.010 -0.360 -2.289 0.022
d_trust_1 ~~ sa07_06_t1 0.045 -0.028 0.118 0.102 1.213 0.225
sa07_06_t1 ~~ sa07_06_t1 1.934 1.748 2.120 1.000 20.379 0.000

Correlation of specific, facet-level acceptance goals with trust change score (current-self) is not significantly different from zero, r = 0.102, p = 0.225.

6.5.2.24 Trust - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8578.922 8663.607 0.957 0.046 0.044
# parameters of interest
params_lcs_trust_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.980 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.640 NA NA
d_trust_1 ~1 0.030 -0.024 0.084 0.106 1.081 0.280
trust_t1 ~1 1.905 1.811 1.999 4.404 39.668 0.000
d_trust_1 ~~ d_trust_1 0.080 0.029 0.131 1.000 3.073 0.002
trust_t1 ~~ d_trust_1 -0.036 -0.072 0.000 -0.295 -1.957 0.050
d_trust_1 ~~ sa07_06_t1 0.010 -0.059 0.078 0.025 0.281 0.779
sa07_06_t1 ~~ sa07_06_t1 1.934 1.748 2.120 1.000 20.381 0.000

Correlation of specific, facet-level acceptance goals with trust change score (ideal-self) is not significantly different from zero, r = 0.025, p = 0.779.

6.5.2.25 Organization - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8245.77 8330.455 0.978 0.056 0.034
# parameters of interest
params_lcs_organ_curr_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.054 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.475 NA NA
d_organ_1 ~1 -0.143 -0.217 -0.069 -0.303 -3.782 0.000
organ_t1 ~1 2.958 2.818 3.099 2.829 41.274 0.000
d_organ_1 ~~ d_organ_1 0.223 0.127 0.318 1.000 4.548 0.000
organ_t1 ~~ d_organ_1 -0.165 -0.247 -0.084 -0.335 -3.994 0.000
d_organ_1 ~~ sa06_01_t1 -0.004 -0.062 0.054 -0.009 -0.133 0.894
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.839 0.000

Correlation of general acceptance goal with organization change score (current-self) is not significantly different from zero, r = -0.009, p = 0.894.

6.5.2.26 Organization - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7177.95 7262.635 0.918 0.058 0.06
# parameters of interest
params_lcs_organ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.035 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.821 NA NA
d_organ_1 ~1 0.001 -0.031 0.033 0.005 0.064 0.949
organ_t1 ~1 1.696 1.607 1.785 6.670 37.349 0.000
d_organ_1 ~~ d_organ_1 0.041 0.002 0.080 1.000 2.051 0.040
organ_t1 ~~ d_organ_1 -0.022 -0.043 -0.002 -0.438 -2.118 0.034
d_organ_1 ~~ sa06_01_t1 0.007 -0.019 0.032 0.037 0.528 0.598
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.190 0.000
sa06_01_t1 ~1 4.222 4.123 4.320 4.561 84.126 0.000

Correlation of general acceptance goal with organization change score (ideal-self) is not significantly different from zero, r = 0.037, p = 0.598.

6.5.2.27 Organization - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8573.096 8657.781 0.878 0.138 0.174
# parameters of interest
params_lcs_organ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.113 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.547 NA NA
d_organ_1 ~1 -0.141 -0.216 -0.067 -0.275 -3.732 0.000
organ_t1 ~1 2.958 2.818 3.099 2.827 41.273 0.000
d_organ_1 ~~ d_organ_1 0.264 0.146 0.382 1.000 4.396 0.000
organ_t1 ~~ d_organ_1 -0.237 -0.344 -0.130 -0.442 -4.349 0.000
d_organ_1 ~~ sa07_07_t1 0.164 0.029 0.300 0.211 2.380 0.017
sa07_07_t1 ~~ sa07_07_t1 2.290 2.110 2.470 1.000 24.910 0.000

The correlation of specific, facet-level acceptance goals with the organization change score (current-self) is significantly different from zero, r = 0.211, p = 0.017.

6.5.2.28 Organization - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7511.071 7595.757 0.926 0.055 0.06
# parameters of interest
params_lcs_organ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.041 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.837 NA NA
d_organ_1 ~1 0.001 -0.031 0.033 0.005 0.063 0.950
organ_t1 ~1 1.696 1.607 1.785 6.657 37.345 0.000
d_organ_1 ~~ d_organ_1 0.042 0.002 0.082 1.000 2.053 0.040
organ_t1 ~~ d_organ_1 -0.023 -0.045 -0.002 -0.450 -2.132 0.033
d_organ_1 ~~ sa07_07_t1 0.015 -0.027 0.058 0.050 0.704 0.481
sa07_07_t1 ~~ sa07_07_t1 2.290 2.110 2.470 1.000 24.902 0.000

Correlation of specific, facet-level acceptance goals with organization change score (ideal-self) is not significantly different from zero, r = 0.05, p = 0.481.

6.5.2.29 Productiveness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8282.901 8367.586 0.985 0.04 0.038
# parameters of interest
params_lcs_produ_curr_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.982 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.430 NA NA
d_produ_1 ~1 -0.203 -0.274 -0.132 -0.559 -5.629 0.000
produ_t1 ~1 3.461 3.333 3.589 4.174 53.095 0.000
d_produ_1 ~~ d_produ_1 0.132 0.055 0.209 1.000 3.348 0.001
produ_t1 ~~ d_produ_1 -0.054 -0.118 0.011 -0.178 -1.630 0.103
d_produ_1 ~~ sa06_01_t1 -0.023 -0.074 0.028 -0.067 -0.868 0.386
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.222 4.123 4.320 4.561 83.947 0.000

Correlation of general acceptance goal with productiveness change score (current-self) is not significantly different from zero, r = -0.067, p = 0.386.

6.5.2.30 Productiveness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 6678.895 6763.581 0.867 0.071 0.071
# parameters of interest
params_lcs_produ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.086 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.748 NA NA
d_produ_1 ~1 -0.026 -0.078 0.025 -0.097 -1.005 0.315
produ_t1 ~1 1.612 1.536 1.689 4.075 41.302 0.000
d_produ_1 ~~ d_produ_1 0.074 0.013 0.136 1.000 2.369 0.018
produ_t1 ~~ d_produ_1 -0.049 -0.099 0.001 -0.455 -1.923 0.055
d_produ_1 ~~ sa06_01_t1 -0.012 -0.048 0.025 -0.046 -0.619 0.536
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.947 0.000

Correlation of general acceptance goal with productiveness change score (ideal-self) is not significantly different from zero, r = -0.046, p = 0.536.

6.5.2.31 Productiveness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8570.793 8655.478 0.89 0.115 0.153
# parameters of interest
params_lcs_produ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.026 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.478 NA NA
d_produ_1 ~1 -0.201 -0.271 -0.131 -0.520 -5.611 0.000
produ_t1 ~1 3.460 3.333 3.588 4.184 53.123 0.000
d_produ_1 ~~ d_produ_1 0.149 0.059 0.238 1.000 3.248 0.001
produ_t1 ~~ d_produ_1 -0.092 -0.172 -0.011 -0.287 -2.235 0.025
d_produ_1 ~~ sa07_08_t1 0.099 -0.009 0.208 0.182 1.798 0.072
sa07_08_t1 ~~ sa07_08_t1 2.019 1.832 2.206 1.000 21.143 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (current-self) is not significantly different from zero, r = 0.182, p = 0.072.

6.5.2.32 Productiveness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 6969.792 7054.477 0.88 0.067 0.066
# parameters of interest
params_lcs_produ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.085 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.742 NA NA
d_produ_1 ~1 -0.026 -0.078 0.025 -0.097 -0.998 0.318
produ_t1 ~1 1.612 1.536 1.689 4.066 41.284 0.000
d_produ_1 ~~ d_produ_1 0.074 0.012 0.135 1.000 2.360 0.018
produ_t1 ~~ d_produ_1 -0.049 -0.098 0.001 -0.452 -1.912 0.056
d_produ_1 ~~ sa07_08_t1 0.008 -0.049 0.065 0.021 0.281 0.779
sa07_08_t1 ~~ sa07_08_t1 2.019 1.832 2.206 1.000 21.143 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (ideal-self) is not significantly different from zero, r = 0.021, p = 0.779.

6.5.2.33 Responsibility - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8327.703 8412.388 0.913 0.083 0.079
# parameters of interest
params_lcs_respo_curr_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.012 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.397 NA NA
d_respo_1 ~1 0.119 0.055 0.183 0.458 3.649 0.000
respo_t1 ~1 3.622 3.519 3.724 5.455 69.260 0.000
d_respo_1 ~~ d_respo_1 0.068 0.007 0.128 1.000 2.204 0.028
respo_t1 ~~ d_respo_1 -0.039 -0.095 0.016 -0.227 -1.388 0.165
d_respo_1 ~~ sa06_01_t1 0.035 -0.012 0.082 0.145 1.459 0.145
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.222 4.123 4.320 4.561 83.967 0.000

Correlation of general acceptance goal with responsibility change score (current-self) is not significantly different from zero, r = 0.145, p = 0.145.

6.5.2.34 Responsibility - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7648.902 7733.588 0.98 0.029 0.048
# parameters of interest
params_lcs_respo_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.053 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.794 NA NA
d_respo_1 ~1 0.031 -0.034 0.096 0.080 0.921 0.357
respo_t1 ~1 4.275 4.175 4.375 8.429 83.548 0.000
d_respo_1 ~~ d_respo_1 0.146 0.036 0.256 1.000 2.598 0.009
respo_t1 ~~ d_respo_1 -0.086 -0.158 -0.013 -0.442 -2.319 0.020
d_respo_1 ~~ sa06_01_t1 0.013 -0.040 0.066 0.037 0.488 0.625
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.190 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.980 0.000

Correlation of general acceptance goal with responsibility change score (ideal-self) is not significantly different from zero, r = 0.037, p = 0.625.

6.5.2.35 Responsibility - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8619.998 8704.683 0.849 0.114 0.125
# parameters of interest
params_lcs_respo_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.058 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.453 NA NA
d_respo_1 ~1 0.120 0.056 0.183 0.420 3.701 0.000
respo_t1 ~1 3.621 3.519 3.724 5.442 69.342 0.000
d_respo_1 ~~ d_respo_1 0.081 0.017 0.146 1.000 2.470 0.013
respo_t1 ~~ d_respo_1 -0.064 -0.126 -0.002 -0.338 -2.027 0.043
d_respo_1 ~~ sa07_09_t1 -0.132 -0.226 -0.039 -0.322 -2.768 0.006
sa07_09_t1 ~~ sa07_09_t1 2.074 1.885 2.262 1.000 21.605 0.000

The correlation of specific, facet-level acceptance goals with the responsibility change score (current-self) is significantly different from zero, r = -0.322, p = 0.006.

6.5.2.36 Responsibility - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7947.706 8032.391 0.98 0.029 0.046
# parameters of interest
params_lcs_respo_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.053 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.792 NA NA
d_respo_1 ~1 0.030 -0.035 0.095 0.079 0.908 0.364
respo_t1 ~1 4.275 4.175 4.375 8.462 83.572 0.000
d_respo_1 ~~ d_respo_1 0.144 0.036 0.253 1.000 2.602 0.009
respo_t1 ~~ d_respo_1 -0.085 -0.155 -0.014 -0.442 -2.350 0.019
d_respo_1 ~~ sa07_09_t1 -0.044 -0.125 0.038 -0.080 -1.047 0.295
sa07_09_t1 ~~ sa07_09_t1 2.074 1.885 2.262 1.000 21.610 0.000

Correlation of specific, facet-level acceptance goals with responsibility change score (ideal-self) is not significantly different from zero, r = -0.08, p = 0.295.

6.5.2.37 Anxiety - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8706.769 8791.454 0.964 0.053 0.069
# parameters of interest
params_lcs_anxie_curr_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.951 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.510 NA NA
d_anxie_1 ~1 0.204 0.115 0.292 0.421 4.511 0.000
anxie_t1 ~1 2.686 2.558 2.814 2.976 41.185 0.000
d_anxie_1 ~~ d_anxie_1 0.234 0.105 0.363 1.000 3.551 0.000
anxie_t1 ~~ d_anxie_1 -0.074 -0.169 0.021 -0.170 -1.529 0.126
d_anxie_1 ~~ sa06_01_t1 0.060 -0.020 0.141 0.134 1.468 0.142
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.192 0.000
sa06_01_t1 ~1 4.221 4.122 4.320 4.561 83.929 0.000

Correlation of general acceptance goal with anxiety change score (current-self) is not significantly different from zero, r = 0.134, p = 0.142.

6.5.2.38 Anxiety - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8258.465 8343.15 0.906 0.044 0.048
# parameters of interest
params_lcs_anxie_ideal_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.864 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.771 NA NA
d_anxie_1 ~1 -0.045 -0.100 0.011 -0.181 -1.588 0.112
anxie_t1 ~1 4.567 4.503 4.631 16.374 139.742 0.000
d_anxie_1 ~~ d_anxie_1 0.062 -0.028 0.152 1.000 1.350 0.177
anxie_t1 ~~ d_anxie_1 -0.018 -0.054 0.019 -0.256 -0.950 0.342
d_anxie_1 ~~ sa06_01_t1 0.018 -0.023 0.059 0.080 0.875 0.382
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.192 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.980 0.000

Correlation of general acceptance goal with anxiety change score (ideal-self) is not significantly different from zero, r = 0.08, p = 0.382.

6.5.2.39 Anxiety - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 9012.64 9097.325 0.92 0.081 0.103
# parameters of interest
params_lcs_anxie_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.963 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.524 NA NA
d_anxie_1 ~1 0.202 0.114 0.290 0.412 4.500 0.000
anxie_t1 ~1 2.686 2.558 2.814 2.986 41.203 0.000
d_anxie_1 ~~ d_anxie_1 0.239 0.106 0.373 1.000 3.508 0.000
anxie_t1 ~~ d_anxie_1 -0.088 -0.184 0.008 -0.200 -1.793 0.073
d_anxie_1 ~~ sa07_10_t1 0.011 -0.118 0.140 0.016 0.169 0.866
sa07_10_t1 ~~ sa07_10_t1 2.097 1.913 2.282 1.000 22.296 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (current-self) is not significantly different from zero, r = 0.016, p = 0.866.

6.5.2.40 Anxiety - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8562.512 8647.197 0.903 0.044 0.047
# parameters of interest
params_lcs_anxie_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.858 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.767 NA NA
d_anxie_1 ~1 -0.046 -0.102 0.010 -0.179 -1.603 0.109
anxie_t1 ~1 4.568 4.503 4.632 15.921 139.400 0.000
d_anxie_1 ~~ d_anxie_1 0.066 -0.029 0.161 1.000 1.360 0.174
anxie_t1 ~~ d_anxie_1 -0.018 -0.058 0.022 -0.246 -0.892 0.373
d_anxie_1 ~~ sa07_10_t1 0.014 -0.075 0.103 0.037 0.305 0.760
sa07_10_t1 ~~ sa07_10_t1 2.097 1.913 2.282 1.000 22.295 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal-self) is not significantly different from zero, r = 0.037, p = 0.76.

6.5.2.41 Depression - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8469.485 8554.17 0.951 0.079 0.069
# parameters of interest
params_lcs_depre_curr_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.999 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.576 NA NA
d_depre_1 ~1 0.198 0.129 0.267 0.479 5.645 0.000
depre_t1 ~1 2.963 2.837 3.088 4.130 46.210 0.000
d_depre_1 ~~ d_depre_1 0.171 0.094 0.248 1.000 4.359 0.000
depre_t1 ~~ d_depre_1 -0.085 -0.138 -0.032 -0.286 -3.134 0.002
d_depre_1 ~~ sa06_01_t1 0.028 -0.020 0.075 0.073 1.152 0.249
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.022 1.000 10.192 0.000
sa06_01_t1 ~1 4.222 4.123 4.320 4.561 84.004 0.000

Correlation of general acceptance goal with depression change score (current-self) is not significantly different from zero, r = 0.073, p = 0.249.

6.5.2.42 Depression - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 6711.108 6795.793 0.83 0.081 0.073
# parameters of interest
params_lcs_depre_ideal_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.062 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.810 NA NA
d_depre_1 ~1 0.018 -0.019 0.055 0.081 0.964 0.335
depre_t1 ~1 4.409 4.345 4.474 15.098 133.549 0.000
d_depre_1 ~~ d_depre_1 0.050 0.003 0.096 1.000 2.106 0.035
depre_t1 ~~ d_depre_1 -0.030 -0.059 -0.001 -0.455 -2.010 0.044
d_depre_1 ~~ sa06_01_t1 -0.006 -0.034 0.022 -0.028 -0.408 0.684
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 84.032 0.000

Correlation of general acceptance goal with depression change score (ideal-self) is not significantly different from zero, r = -0.028, p = 0.684.

6.5.2.43 Depression - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8791.845 8876.53 0.91 0.11 0.123
# parameters of interest
params_lcs_depre_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.023 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.603 NA NA
d_depre_1 ~1 0.197 0.129 0.266 0.466 5.658 0.000
depre_t1 ~1 2.963 2.837 3.088 4.133 46.207 0.000
d_depre_1 ~~ d_depre_1 0.179 0.095 0.263 1.000 4.183 0.000
depre_t1 ~~ d_depre_1 -0.101 -0.165 -0.036 -0.332 -3.066 0.002
d_depre_1 ~~ sa07_11_t1 -0.049 -0.158 0.060 -0.078 -0.884 0.377
sa07_11_t1 ~~ sa07_11_t1 2.217 2.036 2.399 1.000 23.933 0.000

Correlation of specific, facet-level acceptance goals with depression change score (current-self) is not significantly different from zero, r = -0.078, p = 0.377.

6.5.2.44 Depression - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7033.603 7118.288 0.824 0.082 0.074
# parameters of interest
params_lcs_depre_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.062 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.811 NA NA
d_depre_1 ~1 0.018 -0.018 0.055 0.081 0.972 0.331
depre_t1 ~1 4.409 4.345 4.474 15.086 133.554 0.000
d_depre_1 ~~ d_depre_1 0.050 0.003 0.096 1.000 2.107 0.035
depre_t1 ~~ d_depre_1 -0.030 -0.059 -0.001 -0.456 -2.012 0.044
d_depre_1 ~~ sa07_11_t1 0.000 -0.049 0.049 -0.001 -0.010 0.992
sa07_11_t1 ~~ sa07_11_t1 2.217 2.036 2.399 1.000 23.939 0.000

Correlation of specific, facet-level acceptance goals with depression change score (ideal-self) is not significantly different from zero, r = -0.001, p = 0.992.

6.5.2.45 Volatility - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8511.793 8596.478 0.977 0.052 0.065
# parameters of interest
params_lcs_volat_curr_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.044 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.628 NA NA
d_volat_1 ~1 -0.143 -0.225 -0.062 -0.257 -3.456 0.001
volat_t1 ~1 3.223 3.091 3.354 3.469 48.034 0.000
d_volat_1 ~~ d_volat_1 0.312 0.170 0.455 1.000 4.293 0.000
volat_t1 ~~ d_volat_1 -0.192 -0.292 -0.092 -0.370 -3.759 0.000
d_volat_1 ~~ sa06_01_t1 -0.071 -0.144 0.001 -0.138 -1.924 0.054
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.022 1.000 10.180 0.000
sa06_01_t1 ~1 4.223 4.125 4.322 4.561 84.193 0.000

Correlation of general acceptance goal with volatility change score (current-self) is not significantly different from zero, r = -0.138, p = 0.054.

6.5.2.46 Volatility - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7759.602 7844.287 0.97 0.031 0.045
# parameters of interest
params_lcs_volat_ideal_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.921 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.684 NA NA
d_volat_1 ~1 0.021 -0.041 0.083 0.066 0.667 0.505
volat_t1 ~1 1.704 1.623 1.785 3.950 41.190 0.000
d_volat_1 ~~ d_volat_1 0.102 0.024 0.181 1.000 2.564 0.010
volat_t1 ~~ d_volat_1 -0.035 -0.087 0.018 -0.251 -1.287 0.198
d_volat_1 ~~ sa06_01_t1 -0.056 -0.102 -0.009 -0.187 -2.338 0.019
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.190 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.995 0.000

The correlation of general acceptance goal with the volatility change score (ideal-self) is significantly different from zero, r = -0.187, p = 0.019.

6.5.2.47 Volatility - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8744.382 8829.067 0.964 0.065 0.076
# parameters of interest
params_lcs_volat_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.060 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.648 NA NA
d_volat_1 ~1 -0.142 -0.224 -0.061 -0.250 -3.426 0.001
volat_t1 ~1 3.223 3.091 3.354 3.466 48.022 0.000
d_volat_1 ~~ d_volat_1 0.323 0.174 0.472 1.000 4.243 0.000
volat_t1 ~~ d_volat_1 -0.209 -0.315 -0.103 -0.396 -3.876 0.000
d_volat_1 ~~ sa07_12_t1 -0.005 -0.118 0.108 -0.007 -0.085 0.932
sa07_12_t1 ~~ sa07_12_t1 1.682 1.503 1.861 1.000 18.422 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (current-self) is not significantly different from zero, r = -0.007, p = 0.932.

6.5.2.48 Volatility - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7992.18 8076.865 0.955 0.038 0.046
# parameters of interest
params_lcs_volat_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.911 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.666 NA NA
d_volat_1 ~1 0.022 -0.040 0.085 0.071 0.704 0.482
volat_t1 ~1 1.703 1.622 1.784 3.927 41.180 0.000
d_volat_1 ~~ d_volat_1 0.100 0.021 0.179 1.000 2.488 0.013
volat_t1 ~~ d_volat_1 -0.031 -0.084 0.022 -0.226 -1.145 0.252
d_volat_1 ~~ sa07_12_t1 -0.030 -0.101 0.041 -0.072 -0.815 0.415
sa07_12_t1 ~~ sa07_12_t1 1.682 1.503 1.861 1.000 18.422 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (ideal-self) is not significantly different from zero, r = -0.072, p = 0.415.

6.5.2.49 Curiosity - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8292.656 8377.341 0.967 0.041 0.051
# parameters of interest
params_lcs_curio_curr_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.162 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.693 NA NA
d_curio_1 ~1 0.114 0.041 0.187 0.311 3.046 0.002
curio_t1 ~1 4.073 3.978 4.167 6.644 84.612 0.000
d_curio_1 ~~ d_curio_1 0.134 0.032 0.235 1.000 2.576 0.010
curio_t1 ~~ d_curio_1 -0.115 -0.214 -0.016 -0.515 -2.286 0.022
d_curio_1 ~~ sa06_01_t1 0.033 -0.021 0.087 0.097 1.197 0.231
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.193 0.000
sa06_01_t1 ~1 4.221 4.122 4.319 4.560 83.974 0.000

Correlation of general acceptance goal with curiosity change score (current-self) is not significantly different from zero, r = 0.097, p = 0.231.

6.5.2.50 Curiosity - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8202.72 8287.406 1 0 0.038
# parameters of interest
params_lcs_curio_ideal_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.048 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.694 NA NA
d_curio_1 ~1 0.014 -0.030 0.057 0.068 0.625 0.532
curio_t1 ~1 4.494 4.426 4.561 14.600 130.724 0.000
d_curio_1 ~~ d_curio_1 0.042 -0.006 0.090 1.000 1.696 0.090
curio_t1 ~~ d_curio_1 -0.025 -0.051 0.001 -0.399 -1.868 0.062
d_curio_1 ~~ sa06_01_t1 0.016 -0.016 0.048 0.084 0.961 0.336
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.190 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.964 0.000

Correlation of general acceptance goal with curiosity change score (ideal-self) is not significantly different from zero, r = 0.084, p = 0.336.

6.5.2.51 Curiosity - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8545.395 8630.08 0.904 0.073 0.085
# parameters of interest
params_lcs_curio_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.197 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.750 NA NA
d_curio_1 ~1 0.113 0.040 0.186 0.296 3.045 0.002
curio_t1 ~1 4.073 3.978 4.167 6.647 84.739 0.000
d_curio_1 ~~ d_curio_1 0.147 0.038 0.257 1.000 2.630 0.009
curio_t1 ~~ d_curio_1 -0.130 -0.236 -0.025 -0.554 -2.425 0.015
d_curio_1 ~~ sa07_13_t1 -0.081 -0.170 0.008 -0.156 -1.783 0.075
sa07_13_t1 ~~ sa07_13_t1 1.818 1.605 2.030 1.000 16.770 0.000

The correlation of specific, facet-level acceptance goals with the curiosity change score (current-self) is significantly different from zero, r = -0.156, p = 0.075.

6.5.2.52 Curiosity - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8455.269 8539.954 0.978 0.027 0.046
# parameters of interest
params_lcs_curio_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.052 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.707 NA NA
d_curio_1 ~1 0.013 -0.030 0.057 0.063 0.593 0.553
curio_t1 ~1 4.494 4.426 4.561 14.425 130.675 0.000
d_curio_1 ~~ d_curio_1 0.044 -0.005 0.093 1.000 1.743 0.081
curio_t1 ~~ d_curio_1 -0.027 -0.054 0.000 -0.408 -1.925 0.054
d_curio_1 ~~ sa07_13_t1 -0.047 -0.105 0.010 -0.168 -1.621 0.105
sa07_13_t1 ~~ sa07_13_t1 1.817 1.605 2.030 1.000 16.761 0.000

Correlation of specific, facet-level acceptance goals with curiosity change score (ideal-self) is not significantly different from zero, r = -0.168, p = 0.105.

6.5.2.53 Aesthetic - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8351.902 8436.587 0.978 0.047 0.051
# parameters of interest
params_lcs_aesth_curr_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.095 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.657 NA NA
d_aesth_1 ~1 -0.002 -0.006 0.002 -0.076 -1.048 0.295
aesth_t1 ~1 2.940 2.825 3.055 64.922 49.992 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 4.920 0.000
aesth_t1 ~~ d_aesth_1 -0.001 -0.001 0.000 -0.439 -4.697 0.000
d_aesth_1 ~~ sa06_01_t1 -0.002 -0.005 0.001 -0.075 -1.202 0.229
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.990 0.000

Correlation of general acceptance goal with aesthetic change score (current-self) is not significantly different from zero, r = -0.075, p = 0.229.

6.5.2.54 Aesthetic - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8261.353 8346.038 0.962 0.054 0.064
# parameters of interest
params_lcs_aesth_ideal_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.952 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.675 NA NA
d_aesth_1 ~1 -0.001 -0.005 0.003 -0.045 -0.584 0.559
aesth_t1 ~1 3.208 3.079 3.338 92.946 48.630 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 4.164 0.000
aesth_t1 ~~ d_aesth_1 0.000 -0.001 0.000 -0.282 -1.760 0.078
d_aesth_1 ~~ sa06_01_t1 0.001 -0.003 0.004 0.033 0.440 0.660
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 84.021 0.000

Correlation of general acceptance goal with aesthetic change score (ideal-self) is not significantly different from zero, r = 0.033, p = 0.66.

6.5.2.55 Aesthetic - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8626.778 8711.463 0.971 0.055 0.066
# parameters of interest
params_lcs_aesth_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.090 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.648 NA NA
d_aesth_1 ~1 -0.002 -0.006 0.002 -0.075 -1.034 0.301
aesth_t1 ~1 2.940 2.825 3.055 64.270 49.993 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 4.859 0.000
aesth_t1 ~~ d_aesth_1 -0.001 -0.001 0.000 -0.431 -4.567 0.000
d_aesth_1 ~~ sa07_14_t1 0.000 -0.006 0.005 -0.013 -0.188 0.851
sa07_14_t1 ~~ sa07_14_t1 1.920 1.736 2.104 1.000 20.436 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (current-self) is not significantly different from zero, r = -0.013, p = 0.851.

6.5.2.56 Aesthetic - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8535.045 8619.73 0.987 0.03 0.041
# parameters of interest
params_lcs_aesth_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.948 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.670 NA NA
d_aesth_1 ~1 -0.001 -0.005 0.003 -0.047 -0.612 0.540
aesth_t1 ~1 3.208 3.079 3.338 92.071 48.627 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 4.209 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.273 -1.784 0.074
d_aesth_1 ~~ sa07_14_t1 -0.001 -0.005 0.004 -0.019 -0.271 0.786
sa07_14_t1 ~~ sa07_14_t1 1.920 1.736 2.104 1.000 20.436 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (ideal-self) is not significantly different from zero, r = -0.019, p = 0.786.

6.5.2.57 Imagination - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8099.763 8184.449 0.981 0.04 0.044
# parameters of interest
params_lcs_imagi_curr_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.081 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.566 NA NA
d_imagi_1 ~1 0.102 0.034 0.169 0.269 2.955 0.003
imagi_t1 ~1 3.622 3.523 3.721 5.017 71.805 0.000
d_imagi_1 ~~ d_imagi_1 0.143 0.054 0.231 1.000 3.165 0.002
imagi_t1 ~~ d_imagi_1 -0.109 -0.181 -0.037 -0.399 -2.948 0.003
d_imagi_1 ~~ sa06_01_t1 0.029 -0.027 0.084 0.082 1.013 0.311
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.022 1.000 10.194 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.560 83.985 0.000

Correlation of general acceptance goal with imagination change score (current-self) is not significantly different from zero, r = 0.082, p = 0.311.

6.5.2.58 Imagination - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7601.828 7686.513 0.916 0.053 0.06
# parameters of interest
params_lcs_imagi_ideal_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.871 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.543 NA NA
d_imagi_1 ~1 -0.044 -0.092 0.004 -0.214 -1.790 0.074
imagi_t1 ~1 4.603 4.544 4.663 13.995 151.369 0.000
d_imagi_1 ~~ d_imagi_1 0.042 0.000 0.084 1.000 1.968 0.049
imagi_t1 ~~ d_imagi_1 -0.004 -0.034 0.026 -0.057 -0.250 0.803
d_imagi_1 ~~ sa06_01_t1 -0.015 -0.053 0.024 -0.076 -0.732 0.464
sa06_01_t1 ~~ sa06_01_t1 0.857 0.692 1.021 1.000 10.191 0.000
sa06_01_t1 ~1 4.221 4.123 4.320 4.561 83.935 0.000

Correlation of general acceptance goal with imagination change score (ideal-self) is not significantly different from zero, r = -0.076, p = 0.464.

6.5.2.59 Imagination - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8400.785 8485.47 0.928 0.08 0.105
# parameters of interest
params_lcs_imagi_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.094 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.582 NA NA
d_imagi_1 ~1 0.101 0.033 0.168 0.263 2.932 0.003
imagi_t1 ~1 3.622 3.523 3.721 5.020 71.837 0.000
d_imagi_1 ~~ d_imagi_1 0.147 0.058 0.236 1.000 3.232 0.001
imagi_t1 ~~ d_imagi_1 -0.116 -0.189 -0.044 -0.420 -3.152 0.002
d_imagi_1 ~~ sa07_15_t1 -0.046 -0.137 0.044 -0.084 -1.001 0.317
sa07_15_t1 ~~ sa07_15_t1 2.082 1.901 2.263 1.000 22.531 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (current-self) is not significantly different from zero, r = -0.084, p = 0.317.

6.5.2.60 Imagination - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7903.232 7987.917 0.928 0.048 0.058
# parameters of interest
params_lcs_imagi_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.874 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.550 NA NA
d_imagi_1 ~1 -0.044 -0.092 0.004 -0.211 -1.783 0.075
imagi_t1 ~1 4.603 4.544 4.663 13.998 151.411 0.000
d_imagi_1 ~~ d_imagi_1 0.043 0.000 0.085 1.000 1.979 0.048
imagi_t1 ~~ d_imagi_1 -0.005 -0.035 0.025 -0.068 -0.302 0.763
d_imagi_1 ~~ sa07_15_t1 0.008 -0.052 0.068 0.027 0.262 0.793
sa07_15_t1 ~~ sa07_15_t1 2.082 1.900 2.263 1.000 22.520 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (ideal-self) is not significantly different from zero, r = 0.027, p = 0.793.

6.5.3 Hyp 5: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp5 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general 0.062 0.193 3.212 0.001
extraversion ideal general 0.024 0.076 1.114 0.265
extraversion current specific 0.017 0.052 0.496 0.620
extraversion ideal specific -0.031 -0.097 -0.905 0.365
agreeableness current general 0.027 0.145 1.520 0.129
agreeableness ideal general 0.024 0.084 1.219 0.223
agreeableness current specific 0.005 0.035 0.322 0.748
agreeableness ideal specific 0.008 0.035 0.383 0.701
conscientiousness current general 0.020 0.060 1.025 0.305
conscientiousness ideal general -0.006 -0.020 -0.344 0.731
conscientiousness current specific -0.108 -0.256 -2.610 0.009
conscientiousness ideal specific -0.032 -0.083 -1.310 0.190
neuroticism current general -0.063 -0.157 -2.306 0.021
neuroticism ideal general -0.013 -0.043 -0.728 0.467
neuroticism current specific 0.020 0.053 0.650 0.516
neuroticism ideal specific 0.036 0.140 2.319 0.020
openness current general 0.025 0.090 1.354 0.176
openness ideal general 0.001 0.007 0.088 0.930
openness current specific -0.014 -0.059 -0.747 0.455
openness ideal specific -0.003 -0.016 -0.193 0.847

Five covariances significantly differ from zero:

  • changes in current-level extraversion covary with the general acceptance goal
  • changes in current-level conscientiousness covary with the specific acceptance goals (latent factor of the three C facets) -> unexpected direction of the effect!
  • changes in ideal-level neuroticism covary with the specific acceptance goals (latent factor of the three N facets)
  • changes in ideal-level openness covary with the general acceptance goal

Results summary across the Big Five facets: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general 0.089 0.268 3.243 0.001
sociability ideal general -0.013 -0.060 -0.767 0.443
sociability current specific 0.002 0.004 0.039 0.969
sociability ideal specific -0.009 -0.027 -0.262 0.793
assertiveness current general 0.056 0.181 2.425 0.015
assertiveness ideal general 0.015 0.089 1.023 0.306
assertiveness current specific -0.010 -0.022 -0.253 0.800
assertiveness ideal specific -0.021 -0.084 -0.893 0.372
energy current general -0.019 -0.068 -0.985 0.325
energy ideal general -0.028 -0.147 -1.512 0.130
energy current specific 0.054 0.129 1.373 0.170
energy ideal specific 0.042 0.147 1.420 0.156
compassion current general 0.060 0.142 1.452 0.147
compassion ideal general 0.012 0.041 0.402 0.688
compassion current specific -0.027 -0.046 -0.574 0.566
compassion ideal specific -0.088 -0.214 -1.988 0.047
respectfulness current general 0.012 0.049 0.539 0.590
respectfulness ideal general 0.011 0.054 0.624 0.533
respectfulness current specific 0.013 0.038 0.388 0.698
respectfulness ideal specific -0.009 -0.031 -0.315 0.753
trust current general -0.019 -0.067 -0.717 0.473
trust ideal general -0.045 -0.174 -1.867 0.062
trust current specific 0.045 0.109 1.213 0.225
trust ideal specific 0.010 0.026 0.281 0.779
organization current general -0.004 -0.010 -0.133 0.894
organization ideal general 0.007 0.041 0.528 0.598
organization current specific 0.164 0.236 2.380 0.017
organization ideal specific 0.015 0.055 0.704 0.481
productiveness current general -0.023 -0.068 -0.868 0.386
productiveness ideal general -0.012 -0.051 -0.619 0.536
productiveness current specific 0.099 0.190 1.798 0.072
productiveness ideal specific 0.008 0.024 0.281 0.779
responsibility current general 0.035 0.149 1.459 0.145
responsibility ideal general 0.013 0.042 0.488 0.625
responsibility current specific -0.132 -0.342 -2.768 0.006
responsibility ideal specific -0.044 -0.089 -1.047 0.295
anxiety current general 0.060 0.136 1.468 0.142
anxiety ideal general 0.018 0.082 0.875 0.382
anxiety current specific 0.011 0.016 0.169 0.866
anxiety ideal specific 0.014 0.038 0.305 0.760
depression current general 0.028 0.076 1.152 0.249
depression ideal general -0.006 -0.032 -0.408 0.684
depression current specific -0.049 -0.083 -0.884 0.377
depression ideal specific 0.000 -0.001 -0.010 0.992
volatility current general -0.071 -0.148 -1.923 0.054
volatility ideal general -0.056 -0.194 -2.338 0.019
volatility current specific -0.005 -0.007 -0.085 0.932
volatility ideal specific -0.030 -0.074 -0.815 0.415
curiosity current general 0.033 0.114 1.197 0.231
curiosity ideal general 0.016 0.092 0.961 0.336
curiosity current specific -0.081 -0.187 -1.783 0.075
curiosity ideal specific -0.047 -0.184 -1.621 0.105
aesthetic current general -0.002 -0.084 -1.202 0.229
aesthetic ideal general 0.001 0.034 0.440 0.660
aesthetic current specific 0.000 -0.015 -0.188 0.851
aesthetic ideal specific -0.001 -0.020 -0.271 0.786
imagination current general 0.029 0.089 1.013 0.311
imagination ideal general -0.015 -0.076 -0.732 0.464
imagination current specific -0.046 -0.092 -1.001 0.317
imagination ideal specific 0.008 0.027 0.262 0.793

Looking at the facets, we find four covariances that significantly differ from zero (relatively unsystematic across facets / current-ideal / goal dimension):
- Changes in current-level sociability covary with the general acceptance goal.
- Further, changes in current-level organization and responsibility covary with the respective specific facet acceptance goal.
- Changes in ideal-level volatility covary with the general acceptance goal

Prepare data frame for plotting:

Show the code
df_table_hyp5_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp5_plot <- df_table_hyp5_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general acceptance goal
  • specific = specific, facet-level acceptance goal(s)
Show the code
ggplot(df_table_hyp5_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.6 H6: Desire to change and frequency of self-improvement behaviors as moderators of change in personality in self-improvement group (H2 in paper)

Desire to change and frequency of self-improvement behaviors measured at the follow-up assessment will be positively related to change in current-self ratings in the self-improvement group.

To test this hypothesis, we will estimate the mean-level difference in current trait ratings between baseline and follow up using a latent change model for each big five domain and facet. We will then include two moderators. The first will indicate how much the individual wanted to change on a given big five domain or facet. The second will indicate their frequency of self-improvement behaviors. We will estimate the main effects of each of these variables and the interaction between these variables on the trait change score.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sb_mod <- df_sbsa %>% 
  filter(rando=="Self-Improvement") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07", # facet-specific change goals
                                  "sb04"))) %>% # frequency self-improvement behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb07", "sb04")))) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, 
            sb04_01_t1, sb04_02_t1, sb04_03_t1)) # frequency of self-improvement behaviors measured at T2
# colnames(df_sbsa_wide_pers_sb_mod)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sb_mod <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Improvement") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sb_mod)

6.6.1 Big Five traits

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goals

trait_template_mod_goal <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ goals           # This estimates the moderation effect on personality at T1
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), trait_model_fit))
}  

# 2nd, for frequency of self-improvement behavior

trait_template_mod_frequ <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), trait_model_fit))
}  
6.6.1.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 7065.443 7167.053 0.98 0.051 0.042
# parameters of interest
params_lcs_extra_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.004 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.612 NA NA
d_extra_1 ~1 0.134 0.086 0.182 0.380 5.437 0.000
extra_t1 ~1 2.755 2.684 2.827 4.769 75.569 0.000
d_extra_1 ~~ d_extra_1 0.115 0.071 0.159 0.930 5.137 0.000
extra_t1 ~~ d_extra_1 -0.032 -0.062 -0.003 -0.202 -2.173 0.030
extra_t1 ~ goals -0.460 -0.618 -0.301 -0.571 -5.691 0.000
d_extra_1 ~ goals 0.129 0.019 0.240 0.264 2.296 0.022
goals ~~ goals 0.516 0.250 0.781 1.000 3.803 0.000

The moderation effect of specific, facet-level change goals with the extraversion change score (current-self) is not significantly different from zero, b = 0.129, p = 0.022.

6.6.1.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6510.957 6612.567 0.985 0.046 0.051
# parameters of interest
params_lcs_extra_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.003 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.609 NA NA
d_extra_1 ~1 0.132 0.085 0.180 0.381 5.426 0.000
extra_t1 ~1 2.756 2.685 2.827 4.811 75.587 0.000
d_extra_1 ~~ d_extra_1 0.120 0.073 0.168 0.994 4.961 0.000
extra_t1 ~~ d_extra_1 -0.065 -0.099 -0.031 -0.334 -3.751 0.000
extra_t1 ~ frequ 0.175 0.040 0.310 0.213 2.538 0.011
d_extra_1 ~ frequ 0.040 -0.046 0.125 0.080 0.913 0.361
frequ ~~ frequ 0.488 0.337 0.639 1.000 6.351 0.000

The moderation effect of the frequency of self-improvement behaviors with the extraversion change score (current-self) is not significantly different from zero, b = 0.04, p = 0.361.

6.6.1.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6710.102 6811.712 0.981 0.045 0.044
# parameters of interest
params_lcs_agree_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.064 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA
d_agree_1 ~1 0.075 0.038 0.112 0.355 3.983 0.000
agree_t1 ~1 3.357 3.296 3.418 8.041 107.891 0.000
d_agree_1 ~~ d_agree_1 0.043 0.021 0.065 0.961 3.870 0.000
agree_t1 ~~ d_agree_1 -0.027 -0.043 -0.011 -0.329 -3.352 0.001
agree_t1 ~ goals -0.157 -0.243 -0.072 -0.319 -3.617 0.000
d_agree_1 ~ goals 0.050 -0.002 0.101 0.198 1.902 0.057
goals ~~ goals 0.715 0.394 1.037 1.000 4.361 0.000

The moderation effect of specific, facet-level change goals with the agreeableness change score (current-self) is not significantly different from zero, b = 0.05, p = 0.057.

6.6.1.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 5969.657 6071.267 0.991 0.031 0.04
# parameters of interest
params_lcs_agree_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.060 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA
d_agree_1 ~1 0.078 0.039 0.116 0.358 3.979 0.000
agree_t1 ~1 3.356 3.295 3.417 7.890 107.487 0.000
d_agree_1 ~~ d_agree_1 0.046 0.023 0.069 0.973 3.923 0.000
agree_t1 ~~ d_agree_1 -0.036 -0.055 -0.018 -0.408 -3.857 0.000
agree_t1 ~ frequ 0.115 0.030 0.201 0.194 2.643 0.008
d_agree_1 ~ frequ 0.049 -0.011 0.110 0.164 1.607 0.108
frequ ~~ frequ 0.514 0.363 0.666 1.000 6.639 0.000

The frequency of self-improvement behaviors significantly moderates changes in agreeableness (current-self), b = 0.049, p = 0.108.

6.6.1.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6788.814 6890.424 0.981 0.063 0.035
# parameters of interest
params_lcs_consc_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.037 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.506 NA NA
d_consc_1 ~1 0.123 0.074 0.172 0.342 4.963 0.000
consc_t1 ~1 3.552 3.469 3.636 4.826 83.372 0.000
d_consc_1 ~~ d_consc_1 0.124 0.081 0.167 0.962 5.686 0.000
consc_t1 ~~ d_consc_1 -0.053 -0.089 -0.016 -0.254 -2.848 0.004
consc_t1 ~ goals -0.366 -0.434 -0.299 -0.600 -10.613 0.000
d_consc_1 ~ goals 0.058 0.014 0.102 0.195 2.593 0.010
goals ~~ goals 1.454 1.152 1.756 1.000 9.441 0.000

The moderation effect of specific, facet-level change goals with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.058, p = 0.01.

6.6.1.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6208.3 6309.91 0.994 0.034 0.032
# parameters of interest
params_lcs_consc_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.037 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.507 NA NA
d_consc_1 ~1 0.124 0.075 0.173 0.342 4.951 0.000
consc_t1 ~1 3.551 3.468 3.635 4.795 83.278 0.000
d_consc_1 ~~ d_consc_1 0.129 0.085 0.172 0.983 5.781 0.000
consc_t1 ~~ d_consc_1 -0.089 -0.131 -0.048 -0.340 -4.202 0.000
consc_t1 ~ frequ 0.139 -0.004 0.282 0.133 1.907 0.056
d_consc_1 ~ frequ 0.067 -0.008 0.141 0.130 1.754 0.079
frequ ~~ frequ 0.503 0.352 0.654 1.000 6.516 0.000

The frequency of self-improvement behaviors significantly moderates changes in conscientiousness (current-self), b = 0.067, p = 0.079.

6.6.1.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 7355.95 7457.561 0.987 0.053 0.03
# parameters of interest
params_lcs_neuro_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.027 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.629 NA NA
d_neuro_1 ~1 -0.211 -0.273 -0.149 -0.425 -6.688 0.000
neuro_t1 ~1 3.492 3.400 3.584 4.295 74.420 0.000
d_neuro_1 ~~ d_neuro_1 0.245 0.171 0.320 0.988 6.445 0.000
neuro_t1 ~~ d_neuro_1 -0.113 -0.166 -0.060 -0.367 -4.201 0.000
neuro_t1 ~ goals 0.452 0.364 0.541 0.643 10.023 0.000
d_neuro_1 ~ goals -0.047 -0.111 0.017 -0.108 -1.429 0.153
goals ~~ goals 1.335 1.020 1.650 1.000 8.309 0.000

The moderation effect of specific, facet-level change goals with the neuroticism change score (current-self) is not significantly different from zero, b = -0.047, p = 0.153.

6.6.1.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6688.857 6790.468 0.988 0.049 0.042
# parameters of interest
params_lcs_neuro_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.030 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.630 NA NA
d_neuro_1 ~1 -0.211 -0.272 -0.149 -0.429 -6.725 0.000
neuro_t1 ~1 3.491 3.399 3.582 4.346 74.573 0.000
d_neuro_1 ~~ d_neuro_1 0.238 0.166 0.311 0.987 6.470 0.000
neuro_t1 ~~ d_neuro_1 -0.137 -0.192 -0.081 -0.349 -4.834 0.000
neuro_t1 ~ frequ 0.063 -0.096 0.222 0.056 0.778 0.437
d_neuro_1 ~ frequ -0.080 -0.190 0.031 -0.115 -1.417 0.157
frequ ~~ frequ 0.502 0.349 0.655 1.000 6.433 0.000

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (current-self) is not significantly different from zero, b = -0.08, p = 0.157.

6.6.1.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6817.085 6918.695 0.972 0.064 0.053
# parameters of interest
params_lcs_openn_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.912 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.411 NA NA
d_openn_1 ~1 0.058 0.022 0.093 0.294 3.175 0.001
openn_t1 ~1 3.435 3.367 3.503 7.897 98.482 0.000
d_openn_1 ~~ d_openn_1 0.035 0.015 0.055 0.916 3.398 0.001
openn_t1 ~~ d_openn_1 0.007 -0.008 0.022 0.087 0.882 0.378
openn_t1 ~ goals -0.202 -0.315 -0.090 -0.279 -3.517 0.000
d_openn_1 ~ goals 0.095 0.026 0.163 0.290 2.712 0.007
goals ~~ goals 0.359 0.194 0.525 1.000 4.251 0.000

Trait-specific (facet) change goals significantly moderate changes in openness (current-self), b = 0.095, p = 0.007.

6.6.1.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6280.569 6382.179 0.992 0.034 0.032
# parameters of interest
params_lcs_openn_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.912 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.410 NA NA
d_openn_1 ~1 0.056 0.021 0.092 0.291 3.131 0.002
openn_t1 ~1 3.435 3.367 3.504 7.948 98.534 0.000
d_openn_1 ~~ d_openn_1 0.035 0.015 0.055 0.936 3.466 0.001
openn_t1 ~~ d_openn_1 -0.005 -0.020 0.010 -0.068 -0.689 0.491
openn_t1 ~ frequ 0.152 0.065 0.240 0.247 3.404 0.001
d_openn_1 ~ frequ 0.070 0.006 0.134 0.254 2.148 0.032
frequ ~~ frequ 0.492 0.344 0.641 1.000 6.497 0.000

The frequency of self-improvement behaviors significantly moderates changes in openness (current-self), b = 0.07, p = 0.032.

6.6.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goal

facet_template_mod_goal <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ ind_goal        # This estimates the moderation effect on personality at T1
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), facet_model_fit))
}  

# 2nd, for frequency of self-improvement behavior

facet_template_mod_frequ <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), facet_model_fit))
}  
6.6.2.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8762.653 8852.539 0.953 0.074 0.044
# parameters of interest
params_lcs_socia_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.028 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.646 NA NA
d_socia_1 ~1 -0.066 -0.301 0.168 -0.124 -0.555 0.579
socia_t1 ~1 3.959 3.602 4.315 4.665 21.781 0.000
d_socia_1 ~~ d_socia_1 0.277 0.166 0.388 0.975 4.903 0.000
socia_t1 ~~ d_socia_1 -0.129 -0.201 -0.057 -0.325 -3.534 0.000
d_socia_1 ~ sb07_01_t1 0.070 0.006 0.134 0.158 2.137 0.033
sb07_01_t1 ~~ sb07_01_t1 1.451 1.261 1.641 1.000 14.953 0.000

The moderation effect of the facet-specific change goal with the sociability change score (current-self) is not significantly different from zero, b = 0.07, p = 0.033.

6.6.2.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10451.08 10568.32 0.959 0.06 0.049
# parameters of interest
params_lcs_socia_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.030 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.645 NA NA
d_socia_1 ~1 0.179 0.093 0.265 0.340 4.084 0.000
socia_t1 ~1 2.806 2.682 2.929 3.349 44.424 0.000
d_socia_1 ~~ d_socia_1 0.276 0.163 0.389 1.000 4.775 0.000
socia_t1 ~~ d_socia_1 -0.156 -0.237 -0.075 -0.362 -3.784 0.000
socia_t1 ~ frequ 0.231 0.039 0.423 0.195 2.354 0.019
d_socia_1 ~ frequ -0.012 -0.138 0.115 -0.016 -0.180 0.857
frequ ~~ frequ 0.503 0.353 0.653 1.000 6.576 0.000

The moderation effect of the frequency of self-improvement behaviors with sociability change score (current-self) is not significantly different from zero, b = -0.012, p = 0.857.

6.6.2.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 9099.907 9189.793 0.976 0.043 0.045
# parameters of interest
params_lcs_asser_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.994 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.424 NA NA
d_asser_1 ~1 -0.075 -0.237 0.088 -0.296 -0.902 0.367
asser_t1 ~1 3.498 3.228 3.768 5.926 25.404 0.000
d_asser_1 ~~ d_asser_1 0.061 0.008 0.115 0.969 2.240 0.025
asser_t1 ~~ d_asser_1 -0.023 -0.062 0.016 -0.163 -1.156 0.248
d_asser_1 ~ sb07_02_t1 0.038 -0.011 0.087 0.177 1.539 0.124
sb07_02_t1 ~~ sb07_02_t1 1.346 1.177 1.515 1.000 15.654 0.000

The moderation effect of the facet-specific change goal with the assertiveness change score (current-self) is not significantly different from zero, b = 0.038, p = 0.124.

6.6.2.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10760.98 10878.22 0.974 0.042 0.047
# parameters of interest
params_lcs_asser_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.992 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.425 NA NA
d_asser_1 ~1 0.056 0.003 0.109 0.228 2.067 0.039
asser_t1 ~1 3.059 2.958 3.161 5.355 59.063 0.000
d_asser_1 ~~ d_asser_1 0.058 0.008 0.108 0.973 2.294 0.022
asser_t1 ~~ d_asser_1 -0.031 -0.069 0.006 -0.232 -1.626 0.104
asser_t1 ~ frequ 0.147 0.017 0.277 0.182 2.216 0.027
d_asser_1 ~ frequ 0.057 -0.033 0.146 0.163 1.237 0.216
frequ ~~ frequ 0.498 0.349 0.648 1.000 6.527 0.000

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score (current-self) is not significantly different from zero, b = 0.057, p = 0.216.

6.6.2.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 9098.864 9188.75 0.952 0.063 0.045
# parameters of interest
params_lcs_energ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.998 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.557 NA NA
d_energ_1 ~1 -0.011 -0.107 0.084 -0.054 -0.229 0.819
energ_t1 ~1 2.239 2.038 2.440 6.039 21.810 0.000
d_energ_1 ~~ d_energ_1 0.042 0.007 0.077 0.986 2.351 0.019
energ_t1 ~~ d_energ_1 -0.017 -0.036 0.001 -0.251 -1.813 0.070
d_energ_1 ~ sb07_03_t1 -0.020 -0.046 0.006 -0.118 -1.497 0.134
sb07_03_t1 ~~ sb07_03_t1 1.526 1.316 1.735 1.000 14.284 0.000

The moderation effect of the facet-specific change goal with the energy change score (current-self) is not significantly different from zero, b = -0.02, p = 0.134.

6.6.2.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10741.64 10858.88 0.958 0.053 0.053
# parameters of interest
params_lcs_energ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.993 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.551 NA NA
d_energ_1 ~1 -0.091 -0.136 -0.046 -0.418 -3.960 0.000
energ_t1 ~1 2.709 2.609 2.808 6.913 53.412 0.000
d_energ_1 ~~ d_energ_1 0.047 0.010 0.084 0.993 2.507 0.012
energ_t1 ~~ d_energ_1 -0.024 -0.047 -0.001 -0.297 -2.088 0.037
energ_t1 ~ frequ -0.144 -0.252 -0.036 -0.256 -2.611 0.009
d_energ_1 ~ frequ -0.026 -0.094 0.043 -0.082 -0.729 0.466
frequ ~~ frequ 0.483 0.330 0.637 1.000 6.190 0.000

The moderation effect of the frequency of self-improvement behaviors with the energy change score (current-self) is not significantly different from zero, b = -0.026, p = 0.466.

6.6.2.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8930.983 9020.869 0.996 0.014 0.034
# parameters of interest
params_lcs_compa_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.139 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.403 NA NA
d_compa_1 ~1 0.005 -0.126 0.135 0.018 0.069 0.945
compa_t1 ~1 4.465 4.287 4.643 6.300 49.154 0.000
d_compa_1 ~~ d_compa_1 0.060 -0.015 0.136 0.957 1.558 0.119
compa_t1 ~~ d_compa_1 -0.080 -0.153 -0.008 -0.475 -2.176 0.030
d_compa_1 ~ sb07_04_t1 0.037 -0.010 0.085 0.207 1.541 0.123
sb07_04_t1 ~~ sb07_04_t1 1.938 1.757 2.119 1.000 21.039 0.000

The moderation effect of the facet-specific change goal with the compassion change score (current-self) is not significantly different from zero, b = 0.037, p = 0.123.

6.6.2.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10452.25 10569.49 0.988 0.026 0.043
# parameters of interest
params_lcs_compa_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.138 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.401 NA NA
d_compa_1 ~1 0.103 0.037 0.170 0.416 3.063 0.002
compa_t1 ~1 4.149 4.059 4.239 5.872 89.984 0.000
d_compa_1 ~~ d_compa_1 0.058 -0.017 0.133 0.939 1.524 0.127
compa_t1 ~~ d_compa_1 -0.097 -0.171 -0.023 -0.582 -2.576 0.010
compa_t1 ~ frequ 0.206 0.065 0.347 0.210 2.859 0.004
d_compa_1 ~ frequ 0.085 -0.017 0.188 0.247 1.635 0.102
frequ ~~ frequ 0.519 0.367 0.670 1.000 6.723 0.000

The frequency of self-improvement behaviors significantly moderates changes in compassion (current-self), b = 0.085, p = 0.102.

6.6.2.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8127.341 8217.227 0.944 0.068 0.056
# parameters of interest
params_lcs_respe_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.128 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.632 NA NA
d_respe_1 ~1 -0.106 -0.207 -0.006 -0.319 -2.076 0.038
respe_t1 ~1 4.825 4.701 4.948 8.118 76.584 0.000
d_respe_1 ~~ d_respe_1 0.100 0.050 0.150 0.906 3.918 0.000
respe_t1 ~~ d_respe_1 -0.068 -0.118 -0.017 -0.396 -2.617 0.009
d_respe_1 ~ sb07_05_t1 0.076 0.029 0.123 0.307 3.178 0.001
sb07_05_t1 ~~ sb07_05_t1 1.811 1.606 2.015 1.000 17.355 0.000

The moderation effect of the facet-specific change goal with the respectfulness change score (current-self) is not significantly different from zero, b = 0.076, p = 0.001.

6.6.2.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 9723.922 9841.164 0.952 0.057 0.053
# parameters of interest
params_lcs_respe_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.127 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.631 NA NA
d_respe_1 ~1 0.065 0.011 0.120 0.199 2.338 0.019
respe_t1 ~1 4.398 4.321 4.475 7.542 111.826 0.000
d_respe_1 ~~ d_respe_1 0.106 0.053 0.160 0.998 3.897 0.000
respe_t1 ~~ d_respe_1 -0.091 -0.149 -0.032 -0.482 -3.046 0.002
respe_t1 ~ frequ 0.122 0.000 0.243 0.149 1.959 0.050
d_respe_1 ~ frequ 0.020 -0.069 0.109 0.043 0.434 0.664
frequ ~~ frequ 0.512 0.360 0.663 1.000 6.602 0.000

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score (current-self) is not significantly different from zero, b = 0.02, p = 0.664.

6.6.2.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 9284.387 9374.273 0.955 0.056 0.044
# parameters of interest
params_lcs_trust_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.025 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.558 NA NA
d_trust_1 ~1 -0.076 -0.211 0.058 -0.234 -1.111 0.267
trust_t1 ~1 2.772 2.578 2.967 4.630 27.902 0.000
d_trust_1 ~~ d_trust_1 0.106 0.014 0.198 0.997 2.262 0.024
trust_t1 ~~ d_trust_1 -0.061 -0.122 0.000 -0.314 -1.968 0.049
d_trust_1 ~ sb07_06_t1 -0.013 -0.061 0.036 -0.052 -0.506 0.613
sb07_06_t1 ~~ sb07_06_t1 1.807 1.641 1.972 1.000 21.378 0.000

The moderation effect of the facet-specific change goal with the trust change score (current-self) is not significantly different from zero, b = -0.013, p = 0.613.

6.6.2.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10829.68 10946.93 0.973 0.041 0.04
# parameters of interest
params_lcs_trust_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.026 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.555 NA NA
d_trust_1 ~1 -0.111 -0.182 -0.040 -0.345 -3.071 0.002
trust_t1 ~1 2.876 2.764 2.988 4.824 50.239 0.000
d_trust_1 ~~ d_trust_1 0.102 0.013 0.191 0.984 2.246 0.025
trust_t1 ~~ d_trust_1 -0.065 -0.127 -0.002 -0.342 -2.032 0.042
trust_t1 ~ frequ -0.122 -0.248 0.004 -0.146 -1.895 0.058
d_trust_1 ~ frequ -0.058 -0.164 0.048 -0.128 -1.072 0.284
frequ ~~ frequ 0.509 0.358 0.660 1.000 6.615 0.000

The moderation effect of the self-improvement behaviors with the trust change score (current-self) is not significantly different from zero, b = -0.058, p = 0.284.

6.6.2.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8783.838 8873.724 0.945 0.088 0.045
# parameters of interest
params_lcs_organ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.078 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.539 NA NA
d_organ_1 ~1 0.147 -0.048 0.342 0.274 1.476 0.140
organ_t1 ~1 1.421 1.124 1.719 1.324 9.366 0.000
d_organ_1 ~~ d_organ_1 0.271 0.150 0.392 0.943 4.402 0.000
organ_t1 ~~ d_organ_1 -0.143 -0.231 -0.054 -0.316 -3.156 0.002
d_organ_1 ~ sb07_07_t1 -0.087 -0.146 -0.028 -0.239 -2.894 0.004
sb07_07_t1 ~~ sb07_07_t1 2.176 1.971 2.382 1.000 20.723 0.000

The moderation effect of the facet-specific change goal with the organization change score (current-self) is not significantly different from zero, b = -0.087, p = 0.004.

6.6.2.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10380.81 10498.06 0.983 0.042 0.035
# parameters of interest
params_lcs_organ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.077 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.542 NA NA
d_organ_1 ~1 -0.138 -0.216 -0.059 -0.267 -3.444 0.001
organ_t1 ~1 2.864 2.729 3.000 2.801 41.417 0.000
d_organ_1 ~~ d_organ_1 0.264 0.149 0.380 0.997 4.480 0.000
organ_t1 ~~ d_organ_1 -0.211 -0.309 -0.112 -0.408 -4.198 0.000
organ_t1 ~ frequ -0.276 -0.470 -0.083 -0.193 -2.800 0.005
d_organ_1 ~ frequ -0.041 -0.163 0.080 -0.057 -0.669 0.504
frequ ~~ frequ 0.511 0.359 0.663 1.000 6.593 0.000

The moderation effect of the frequency of self-improvement behaviors with the organization change score (current-self) is not significantly different from zero, b = -0.041, p = 0.504.

6.6.2.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8663.677 8753.563 0.978 0.048 0.036
# parameters of interest
params_lcs_produ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.050 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.509 NA NA
d_produ_1 ~1 0.064 -0.131 0.260 0.170 0.643 0.520
produ_t1 ~1 2.228 1.897 2.559 2.859 13.195 0.000
d_produ_1 ~~ d_produ_1 0.138 0.069 0.206 0.964 3.916 0.000
produ_t1 ~~ d_produ_1 -0.073 -0.129 -0.016 -0.287 -2.526 0.012
d_produ_1 ~ sb07_08_t1 -0.056 -0.107 -0.006 -0.189 -2.195 0.028
sb07_08_t1 ~~ sb07_08_t1 1.606 1.377 1.835 1.000 13.728 0.000

The moderation effect of the facet-specific change goal with the productiveness change score (current-self) is not significantly different from zero, b = -0.056, p = 0.028.

6.6.2.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10321.73 10438.97 0.976 0.044 0.043
# parameters of interest
params_lcs_produ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.049 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.513 NA NA
d_produ_1 ~1 -0.152 -0.219 -0.085 -0.406 -4.426 0.000
produ_t1 ~1 3.377 3.256 3.497 4.416 54.910 0.000
d_produ_1 ~~ d_produ_1 0.136 0.069 0.204 0.975 3.957 0.000
produ_t1 ~~ d_produ_1 -0.102 -0.166 -0.038 -0.364 -3.126 0.002
produ_t1 ~ frequ -0.133 -0.304 0.038 -0.123 -1.522 0.128
d_produ_1 ~ frequ -0.084 -0.183 0.014 -0.160 -1.674 0.094
frequ ~~ frequ 0.498 0.347 0.649 1.000 6.467 0.000

The frequency of self-improvement behaviors significantly moderates changes in productiveness (current-self), b = -0.084, p = 0.094.

6.6.2.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8931.665 9021.551 0.915 0.083 0.082
# parameters of interest
params_lcs_respo_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.986 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.464 NA NA
d_respo_1 ~1 0.016 -0.073 0.104 0.076 0.345 0.730
respo_t1 ~1 4.018 3.846 4.190 9.242 45.793 0.000
d_respo_1 ~~ d_respo_1 0.042 0.005 0.079 0.996 2.203 0.028
respo_t1 ~~ d_respo_1 -0.016 -0.037 0.006 -0.198 -1.448 0.148
d_respo_1 ~ sb07_09_t1 0.008 -0.019 0.035 0.061 0.599 0.549
sb07_09_t1 ~~ sb07_09_t1 2.242 2.065 2.418 1.000 24.894 0.000

The moderation effect of the facet-specific change goal with the responsibility change score (current-self) is not significantly different from zero, b = 0.008, p = 0.549.

6.6.2.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10462.49 10579.73 0.937 0.064 0.071
# parameters of interest
params_lcs_respo_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.985 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.463 NA NA
d_respo_1 ~1 0.042 -0.004 0.088 0.202 1.778 0.075
respo_t1 ~1 3.623 3.527 3.719 8.179 74.216 0.000
d_respo_1 ~~ d_respo_1 0.042 0.004 0.081 0.978 2.162 0.031
respo_t1 ~~ d_respo_1 -0.018 -0.043 0.006 -0.199 -1.452 0.147
respo_t1 ~ frequ -0.025 -0.118 0.068 -0.041 -0.534 0.593
d_respo_1 ~ frequ 0.043 -0.025 0.111 0.149 1.248 0.212
frequ ~~ frequ 0.510 0.358 0.662 1.000 6.577 0.000

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score (current-self) is not significantly different from zero, b = 0.043, p = 0.212.

6.6.2.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 9197.007 9286.893 0.968 0.055 0.046
# parameters of interest
params_lcs_anxie_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.074 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.674 NA NA
d_anxie_1 ~1 0.038 -0.169 0.245 0.068 0.360 0.719
anxie_t1 ~1 4.107 3.847 4.367 4.594 30.944 0.000
d_anxie_1 ~~ d_anxie_1 0.309 0.145 0.473 0.984 3.696 0.000
anxie_t1 ~~ d_anxie_1 -0.173 -0.276 -0.070 -0.431 -3.292 0.001
d_anxie_1 ~ sb07_10_t1 0.047 -0.009 0.103 0.126 1.644 0.100
sb07_10_t1 ~~ sb07_10_t1 2.270 2.044 2.496 1.000 19.676 0.000

The moderation effect of the facet-specific change goal with the anxiety change score (current-self) is not significantly different from zero, b = 0.047, p = 0.1.

6.6.2.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10787.37 10904.62 0.961 0.053 0.052
# parameters of interest
params_lcs_anxie_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.074 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.677 NA NA
d_anxie_1 ~1 0.214 0.124 0.304 0.375 4.646 0.000
anxie_t1 ~1 2.843 2.718 2.969 3.142 44.427 0.000
d_anxie_1 ~~ d_anxie_1 0.319 0.137 0.501 0.980 3.442 0.001
anxie_t1 ~~ d_anxie_1 -0.208 -0.335 -0.081 -0.410 -3.217 0.001
anxie_t1 ~ frequ -0.159 -0.360 0.042 -0.126 -1.552 0.121
d_anxie_1 ~ frequ 0.113 -0.034 0.260 0.141 1.503 0.133
frequ ~~ frequ 0.510 0.357 0.663 1.000 6.536 0.000

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score (current-self) is not significantly different from zero, b = 0.113, p = 0.133.

6.6.2.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 9036.069 9125.955 0.966 0.069 0.051
# parameters of interest
params_lcs_depre_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.981 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.577 NA NA
d_depre_1 ~1 0.079 -0.038 0.197 0.221 1.327 0.185
depre_t1 ~1 3.832 3.641 4.023 6.261 39.321 0.000
d_depre_1 ~~ d_depre_1 0.129 0.071 0.186 0.993 4.379 0.000
depre_t1 ~~ d_depre_1 -0.045 -0.076 -0.013 -0.274 -2.776 0.006
d_depre_1 ~ sb07_11_t1 0.020 -0.012 0.051 0.086 1.208 0.227
sb07_11_t1 ~~ sb07_11_t1 2.492 2.294 2.689 1.000 24.729 0.000

The moderation effect of the facet-specific change goal with the depression change score (current-self) is not significantly different from zero, b = 0.02, p = 0.227.

6.6.2.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10666.01 10783.26 0.949 0.07 0.06
# parameters of interest
params_lcs_depre_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.976 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.574 NA NA
d_depre_1 ~1 0.150 0.088 0.212 0.409 4.730 0.000
depre_t1 ~1 2.964 2.851 3.076 4.763 51.521 0.000
d_depre_1 ~~ d_depre_1 0.133 0.073 0.194 0.998 4.347 0.000
depre_t1 ~~ d_depre_1 -0.057 -0.092 -0.022 -0.251 -3.184 0.001
depre_t1 ~ frequ -0.007 -0.132 0.118 -0.008 -0.109 0.913
d_depre_1 ~ frequ 0.023 -0.069 0.114 0.044 0.484 0.628
frequ ~~ frequ 0.508 0.355 0.661 1.000 6.512 0.000

The moderation effect of the frequency of self-improvement behaviors with the depression change score (current-self) is not significantly different from zero, b = 0.023, p = 0.628.

6.6.2.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 9180.23 9270.115 0.984 0.042 0.031
# parameters of interest
params_lcs_volat_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.056 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.628 NA NA
d_volat_1 ~1 -0.015 -0.194 0.164 -0.029 -0.163 0.870
volat_t1 ~1 2.658 2.406 2.910 3.050 20.687 0.000
d_volat_1 ~~ d_volat_1 0.262 0.171 0.354 0.977 5.639 0.000
volat_t1 ~~ d_volat_1 -0.151 -0.221 -0.081 -0.358 -4.229 0.000
d_volat_1 ~ sb07_12_t1 -0.060 -0.125 0.004 -0.153 -1.827 0.068
sb07_12_t1 ~~ sb07_12_t1 1.743 1.565 1.921 1.000 19.231 0.000

The moderation effect of the facet-specific change goal with the volatility change score (current-self) is not significantly different from zero, b = -0.06, p = 0.068.

6.6.2.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10776.76 10894.01 0.97 0.051 0.041
# parameters of interest
params_lcs_volat_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.057 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.628 NA NA
d_volat_1 ~1 -0.174 -0.250 -0.097 -0.335 -4.440 0.000
volat_t1 ~1 3.229 3.107 3.351 3.700 51.901 0.000
d_volat_1 ~~ d_volat_1 0.266 0.177 0.355 0.988 5.846 0.000
volat_t1 ~~ d_volat_1 -0.173 -0.244 -0.102 -0.385 -4.751 0.000
volat_t1 ~ frequ 0.039 -0.141 0.219 0.032 0.425 0.671
d_volat_1 ~ frequ -0.080 -0.215 0.055 -0.109 -1.163 0.245
frequ ~~ frequ 0.503 0.351 0.655 1.000 6.480 0.000

The moderation effect of the frequency of self-improvement behaviors with the volatility change score (current-self) is significantly different from zero, b = -0.08, p = 0.245.

6.6.2.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8916.543 9006.429 0.966 0.046 0.048
# parameters of interest
params_lcs_curio_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.993 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.407 NA NA
d_curio_1 ~1 0.040 -0.083 0.164 0.202 0.640 0.522
curio_t1 ~1 4.301 4.120 4.482 8.839 46.576 0.000
d_curio_1 ~~ d_curio_1 0.040 -0.010 0.089 0.996 1.576 0.115
curio_t1 ~~ d_curio_1 -0.017 -0.049 0.015 -0.178 -1.019 0.308
d_curio_1 ~ sb07_13_t1 0.009 -0.040 0.059 0.059 0.376 0.707
sb07_13_t1 ~~ sb07_13_t1 1.563 1.402 1.724 1.000 18.986 0.000

The moderation effect of the facet-specific change goal with the curiosity change score (current-self) is not significantly different from zero, b = 0.009, p = 0.707.

6.6.2.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10522.1 10639.34 0.963 0.046 0.052
# parameters of interest
params_lcs_curio_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.991 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.406 NA NA
d_curio_1 ~1 0.065 0.012 0.118 0.325 2.407 0.016
curio_t1 ~1 4.061 3.969 4.153 8.301 86.403 0.000
d_curio_1 ~~ d_curio_1 0.038 -0.010 0.086 0.944 1.539 0.124
curio_t1 ~~ d_curio_1 -0.022 -0.056 0.011 -0.236 -1.293 0.196
curio_t1 ~ frequ 0.123 0.010 0.236 0.177 2.127 0.033
d_curio_1 ~ frequ 0.067 -0.032 0.167 0.236 1.328 0.184
frequ ~~ frequ 0.495 0.345 0.646 1.000 6.440 0.000

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score (current-self) is not significantly different from zero, b = 0.067, p = 0.184.

6.6.2.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):
(here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_curr_specif_hyp6 <- '
aesth_t1 =~ 1*bf05_05_t1 + lamb2*bf05_20_t1 + lamb3*bf05_35_t1 + lamb4*bf05_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf05_05_t2 + lamb2*bf05_20_t2 + lamb3*bf05_35_t2 + lamb4*bf05_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
aesth_t1 ~ sb07_14_t1      # This estimates the moderation effect on personality at T1
d_aesth_1 ~ sb07_14_t1     # This estimates the moderation effect on the change score

bf05_05_t1 ~~ bf05_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf05_20_t1 ~~ bf05_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf05_35_t1 ~~ bf05_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf05_50_t1 ~~ bf05_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf05_05_t1 ~~ res1*bf05_05_t1   # This allows residual variance on indicator X1 at T1 
bf05_20_t1 ~~ res2*bf05_20_t1   # This allows residual variance on indicator X2 at T1
bf05_35_t1 ~~ res3*bf05_35_t1   # This allows residual variance on indicator X3 at T1
bf05_50_t1 ~~ res4*bf05_50_t1   # This allows residual variance on indicator X4 at T1

bf05_05_t2 ~~ res1*bf05_05_t2  # This allows residual variance on indicator X1 at T2 
bf05_20_t2 ~~ res2*bf05_20_t2  # This allows residual variance on indicator X2 at T2 
bf05_35_t2 ~~ res3*bf05_35_t2  # This allows residual variance on indicator X3 at T2
bf05_50_t2 ~~ res4*bf05_50_t2  # This allows residual variance on indicator X4 at T2

bf05_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf05_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf05_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf05_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf05_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf05_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf05_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf05_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb07_14_t1 ~~ sb07_14_t1
sb07_14_t1 ~ 1
'

fit_mi_lcs_aesth_curr_specif_hyp6 <- lavaan(mi_lcs_aesth_curr_specif_hyp6, 
                                            data=df_sbsa_wide_pers_sb %>% filter(!is.na(bf05_05_t1) & !is.na(bf05_05_t2)), 
                                            estimator='mlr', fixed.x=FALSE, missing="fiml")
Warning in lav_object_post_check(object): lavaan WARNING: covariance matrix of latent variables
                is not positive definite;
                use lavInspect(fit, "cov.lv") to investigate.
# This model did not converge properly with missing data and FIML -> no problem when only using complete data
summary(fit_mi_lcs_aesth_curr_specif_hyp6, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 103 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        32
  Number of equality constraints                    10

  Number of observations                           331
  Number of missing patterns                         2

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               389.043     367.806
  Degrees of freedom                                32          32
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.058
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1061.777     828.089
  Degrees of freedom                                36          36
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.282

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.652       0.576
  Tucker-Lewis Index (TLI)                       0.608       0.523
                                                                  
  Robust Comparative Fit Index (CFI)                         0.651
  Robust Tucker-Lewis Index (TLI)                            0.608

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4500.339   -4500.339
  Scaling correction factor                                  0.866
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4305.817   -4305.817
  Scaling correction factor                                  1.140
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                9044.678    9044.678
  Bayesian (BIC)                              9128.324    9128.324
  Sample-size adjusted Bayesian (SABIC)       9058.539    9058.539

Root Mean Square Error of Approximation:

  RMSEA                                          0.184       0.178
  90 Percent confidence interval - lower         0.168       0.162
  90 Percent confidence interval - upper         0.200       0.194
  P-value H_0: RMSEA <= 0.050                    0.000       0.000
  P-value H_0: RMSEA >= 0.080                    1.000       1.000
                                                                  
  Robust RMSEA                                               0.183
  90 Percent confidence interval - lower                     0.167
  90 Percent confidence interval - upper                     0.200
  P-value H_0: Robust RMSEA <= 0.050                         0.000
  P-value H_0: Robust RMSEA >= 0.080                         1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.205       0.205

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b05_05_           1.000                               0.006    0.005
    b05_20_ (lmb2)    3.110    2.621    1.187    0.235    0.019    0.018
    b05_35_ (lmb3)    3.303    2.803    1.178    0.239    0.020    0.020
    b05_50_ (lmb4)   -3.443    2.980   -1.155    0.248   -0.021   -0.016
  aesth_t2 =~                                                           
    b05_05_           1.000                               0.159    0.120
    b05_20_ (lmb2)    3.110    2.621    1.187    0.235    0.493    0.428
    b05_35_ (lmb3)    3.303    2.803    1.178    0.239    0.524    0.465
    b05_50_ (lmb4)   -3.443    2.980   -1.155    0.248   -0.546   -0.386
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.833    0.833

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.039    0.039
  aesth_t1 ~                                                            
    sb07_14_t1        0.005    0.016    0.289    0.773    0.732    1.000
  d_aesth_1 ~                                                           
    sb07_14_t1        0.016    0.017    0.933    0.351    0.123    0.169

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .aesth_t1 ~~                                                           
   .d_aesth_1         0.004    0.006    0.595    0.552      Inf      Inf
 .bf05_05_t1 ~~                                                         
   .bf05_05_t2        0.543    0.106    5.128    0.000    0.543    0.314
 .bf05_20_t1 ~~                                                         
   .bf05_20_t2        0.733    0.095    7.686    0.000    0.733    0.674
 .bf05_35_t1 ~~                                                         
   .bf05_35_t2        0.638    0.084    7.577    0.000    0.638    0.642
 .bf05_50_t1 ~~                                                         
   .bf05_50_t2        1.184    0.107   11.087    0.000    1.184    0.694

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
   .d_aesth_1        -0.038    0.047   -0.818    0.414   -0.291   -0.291
   .aesth_t1          2.963    0.075   39.688    0.000  480.641  480.641
   .bf05_05_1         0.000                               0.000    0.000
   .bf05_20_1 (m2)   -5.417    7.802   -0.694    0.488   -5.417   -5.194
   .bf05_35_1 (m3)   -5.978    8.350   -0.716    0.474   -5.978   -5.995
   .bf05_50_1 (m4)   12.807    8.880    1.442    0.149   12.807    9.804
   .bf05_05_2         0.000                               0.000    0.000
   .bf05_20_2 (m2)   -5.417    7.802   -0.694    0.488   -5.417   -4.696
   .bf05_35_2 (m3)   -5.978    8.350   -0.716    0.474   -5.978   -5.308
   .bf05_50_2 (m4)   12.807    8.880    1.442    0.149   12.807    9.047
    sb07_14_1         2.731    0.076   36.109    0.000    2.731    1.999

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
   .d_sth_1           0.017    0.030    0.567    0.571    0.972    0.972
   .b05_05_ (res1)    1.729    0.073   23.777    0.000    1.729    1.000
   .b05_20_ (res2)    1.087    0.085   12.840    0.000    1.087    1.000
   .b05_35_ (res3)    0.994    0.076   13.118    0.000    0.994    1.000
   .b05_50_ (res4)    1.706    0.090   18.952    0.000    1.706    1.000
   .b05_05_ (res1)    1.729    0.073   23.777    0.000    1.729    0.986
   .b05_20_ (res2)    1.087    0.085   12.840    0.000    1.087    0.817
   .b05_35_ (res3)    0.994    0.076   13.118    0.000    0.994    0.784
   .b05_50_ (res4)    1.706    0.090   18.952    0.000    1.706    0.851
    s07_14_           1.866    0.089   21.066    0.000    1.866    1.000
   .asth_t1           0.000                               0.000    0.000
# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
331 22 9044.678 9128.324 0.652 0.184 0.205
# parameters of interest
params_lcs_aesth_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.039 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.833 NA NA
d_aesth_1 ~1 -0.038 -0.130 0.054 -0.291 -0.818 0.414
aesth_t1 ~1 2.963 2.817 3.110 480.641 39.688 0.000
d_aesth_1 ~~ d_aesth_1 0.017 -0.042 0.076 0.972 0.567 0.571
aesth_t1 ~~ d_aesth_1 0.004 -0.008 0.016 Inf 0.595 0.552
d_aesth_1 ~ sb07_14_t1 0.016 -0.018 0.051 0.169 0.933 0.351
sb07_14_t1 ~~ sb07_14_t1 1.866 1.692 2.040 1.000 21.066 0.000

The facet-specific change goal significantly moderates changes in the aesthetic score (current-self), b = 0.016, p = 0.351.

6.6.2.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):
(here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_curr_frequ_hyp6 <- '
aesth_t1 =~ 1*bf05_05_t1 + lamb2*bf05_20_t1 + lamb3*bf05_35_t1 + lamb4*bf05_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf05_05_t2 + lamb2*bf05_20_t2 + lamb3*bf05_35_t2 + lamb4*bf05_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ aesth_t1       # This estimates the variance of aesth_t1 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
aesth_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_aesth_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

bf05_05_t1 ~~ bf05_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf05_20_t1 ~~ bf05_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf05_35_t1 ~~ bf05_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf05_50_t1 ~~ bf05_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf05_05_t1 ~~ res1*bf05_05_t1   # This allows residual variance on indicator X1 at T1 
bf05_20_t1 ~~ res2*bf05_20_t1   # This allows residual variance on indicator X2 at T1
bf05_35_t1 ~~ res3*bf05_35_t1   # This allows residual variance on indicator X3 at T1
bf05_50_t1 ~~ res4*bf05_50_t1   # This allows residual variance on indicator X4 at T1

bf05_05_t2 ~~ res1*bf05_05_t2  # This allows residual variance on indicator X1 at T2 
bf05_20_t2 ~~ res2*bf05_20_t2  # This allows residual variance on indicator X2 at T2 
bf05_35_t2 ~~ res3*bf05_35_t2  # This allows residual variance on indicator X3 at T2
bf05_50_t2 ~~ res4*bf05_50_t2  # This allows residual variance on indicator X4 at T2

bf05_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf05_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf05_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf05_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf05_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf05_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf05_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf05_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

fit_mi_lcs_aesth_curr_frequ_hyp6 <- lavaan(mi_lcs_aesth_curr_frequ_hyp6, 
                                            data=df_sbsa_wide_pers_sb_mod %>% filter(!is.na(bf05_05_t1) & !is.na(bf05_05_t2)), 
                                            estimator='mlr', fixed.x=FALSE, missing="fiml")
# This model did not converge properly with missing data and FIML -> no problem when only using complete data
summary(fit_mi_lcs_aesth_curr_frequ_hyp6, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 332 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        40
  Number of equality constraints                    10

  Number of observations                           331
  Number of missing patterns                         1

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                54.322      49.996
  Degrees of freedom                                47          47
  P-value (Chi-square)                           0.216       0.355
  Scaling correction factor                                  1.087
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1359.657    1108.430
  Degrees of freedom                                55          55
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.227

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.994       0.997
  Tucker-Lewis Index (TLI)                       0.993       0.997
                                                                  
  Robust Comparative Fit Index (CFI)                         0.998
  Robust Tucker-Lewis Index (TLI)                            0.998

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -5104.724   -5104.724
  Scaling correction factor                                  0.890
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -5077.563   -5077.563
  Scaling correction factor                                  1.125
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               10269.448   10269.448
  Bayesian (BIC)                             10383.511   10383.511
  Sample-size adjusted Bayesian (SABIC)      10288.350   10288.350

Root Mean Square Error of Approximation:

  RMSEA                                          0.022       0.014
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.044       0.039
  P-value H_0: RMSEA <= 0.050                    0.987       0.997
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.012
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.041
  P-value H_0: Robust RMSEA <= 0.050                         0.993
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.036       0.036

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b05_05_           1.000                               0.039    0.030
    b05_20_ (lmb2)   23.507    1.120   20.996    0.000    0.917    0.826
    b05_35_ (lmb3)   22.131    1.180   18.762    0.000    0.863    0.809
    b05_50_ (lmb4)  -18.112    1.318  -13.740    0.000   -0.706   -0.519
  aesth_t2 =~                                                           
    b05_05_           1.000                               0.040    0.030
    b05_20_ (lmb2)   23.507    1.120   20.996    0.000    0.940    0.832
    b05_35_ (lmb3)   22.131    1.180   18.762    0.000    0.885    0.816
    b05_50_ (lmb4)  -18.112    1.318  -13.740    0.000   -0.724   -0.528
  frequ =~                                                              
    s04_01_           1.000                               0.707    0.733
    s04_02_           1.153    0.109   10.625    0.000    0.815    0.711
    s04_03_           1.210    0.109   11.094    0.000    0.856    0.754
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.585    0.585

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.975    0.975
  aesth_t1 ~                                                            
    frequ             0.010    0.004    2.402    0.016    0.190    0.190
  d_aesth_1 ~                                                           
    frequ             0.005    0.003    1.707    0.088    0.156    0.156

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .aesth_t1 ~~                                                           
   .d_aesth_1        -0.000    0.000   -2.809    0.005   -0.295   -0.295
 .bf05_05_t1 ~~                                                         
   .bf05_05_t2        0.550    0.106    5.210    0.000    0.550    0.316
 .bf05_20_t1 ~~                                                         
   .bf05_20_t2        0.122    0.065    1.890    0.059    0.122    0.312
 .bf05_35_t1 ~~                                                         
   .bf05_35_t2        0.097    0.059    1.640    0.101    0.097    0.246
 .bf05_50_t1 ~~                                                         
   .bf05_50_t2        0.816    0.099    8.267    0.000    0.816    0.602

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
   .d_aesth_1         0.002    0.002    0.915    0.360    0.068    0.068
   .aesth_t1          2.978    0.059   50.604    0.000   76.378   76.378
    frequ             0.000                               0.000    0.000
   .bf05_05_1         0.000                               0.000    0.000
   .bf05_20_1 (m2)  -66.176    3.110  -21.281    0.000  -66.176  -59.618
   .bf05_35_1 (m3)  -62.066    3.186  -19.480    0.000  -62.066  -58.182
   .bf05_50_1 (m4)   56.503    3.916   14.431    0.000   56.503   41.497
   .bf05_05_2         0.000                               0.000    0.000
   .bf05_20_2 (m2)  -66.176    3.110  -21.281    0.000  -66.176  -58.587
   .bf05_35_2 (m3)  -62.066    3.186  -19.480    0.000  -62.066  -57.215
   .bf05_50_2 (m4)   56.503    3.916   14.431    0.000   56.503   41.210
   .sb04_01_2         3.480    0.053   65.575    0.000    3.480    3.604
   .sb04_02_2         3.036    0.063   48.155    0.000    3.036    2.647
   .sb04_03_2         3.423    0.062   54.843    0.000    3.423    3.014

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
   .d_sth_1           0.001    0.000    3.904    0.000    0.976    0.976
   .asth_t1           0.001    0.000    9.518    0.000    0.964    0.964
    frequ             0.500    0.077    6.529    0.000    1.000    1.000
   .b05_05_ (res1)    1.742    0.070   24.777    0.000    1.742    0.999
   .b05_20_ (res2)    0.392    0.069    5.666    0.000    0.392    0.318
   .b05_35_ (res3)    0.393    0.059    6.689    0.000    0.393    0.346
   .b05_50_ (res4)    1.355    0.100   13.604    0.000    1.355    0.731
   .b05_05_ (res1)    1.742    0.070   24.777    0.000    1.742    0.999
   .b05_20_ (res2)    0.392    0.069    5.666    0.000    0.392    0.307
   .b05_35_ (res3)    0.393    0.059    6.689    0.000    0.393    0.334
   .b05_50_ (res4)    1.355    0.100   13.604    0.000    1.355    0.721
   .s04_01_           0.432    0.055    7.841    0.000    0.432    0.463
   .s04_02_           0.651    0.085    7.633    0.000    0.651    0.495
   .s04_03_           0.556    0.079    7.082    0.000    0.556    0.432
# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
331 30 10269.45 10383.51 0.994 0.022 0.036
# parameters of interest
params_lcs_aesth_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.975 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.585 NA NA
d_aesth_1 ~1 0.002 -0.002 0.005 0.068 0.915 0.360
aesth_t1 ~1 2.978 2.863 3.093 76.378 50.604 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.976 3.904 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.295 -2.809 0.005
aesth_t1 ~ frequ 0.010 0.002 0.019 0.190 2.402 0.016
d_aesth_1 ~ frequ 0.005 -0.001 0.011 0.156 1.707 0.088
frequ ~~ frequ 0.500 0.350 0.651 1.000 6.529 0.000

The frequency of self-improvement behaviors significantly moderates changes in the aesthetic score (current-self), b = 0.005, p = 0.088.

6.6.2.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8796.754 8886.64 0.941 0.073 0.068
# parameters of interest
params_lcs_imagi_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.969 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.472 NA NA
d_imagi_1 ~1 -0.046 -0.200 0.108 -0.131 -0.586 0.558
imagi_t1 ~1 3.956 3.749 4.163 5.497 37.456 0.000
d_imagi_1 ~~ d_imagi_1 0.119 0.040 0.198 0.966 2.942 0.003
imagi_t1 ~~ d_imagi_1 -0.033 -0.096 0.029 -0.138 -1.046 0.296
d_imagi_1 ~ sb07_15_t1 0.046 -0.001 0.092 0.183 1.926 0.054
sb07_15_t1 ~~ sb07_15_t1 1.982 1.807 2.157 1.000 22.152 0.000

The moderation effect of the facet-specific change goal with the imagination change score (current-self) is not significantly different from zero, b = 0.046, p = 0.054.

6.6.2.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10317.77 10435.01 0.965 0.051 0.055
# parameters of interest
params_lcs_imagi_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.971 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.473 NA NA
d_imagi_1 ~1 0.098 0.034 0.163 0.279 2.982 0.003
imagi_t1 ~1 3.568 3.470 3.665 4.947 71.846 0.000
d_imagi_1 ~~ d_imagi_1 0.121 0.040 0.203 0.979 2.913 0.004
imagi_t1 ~~ d_imagi_1 -0.054 -0.120 0.011 -0.223 -1.628 0.104
imagi_t1 ~ frequ 0.241 0.086 0.395 0.234 3.050 0.002
d_imagi_1 ~ frequ 0.072 -0.038 0.182 0.144 1.285 0.199
frequ ~~ frequ 0.491 0.342 0.641 1.000 6.455 0.000

The moderation effect of the frequency of self-improvement behaviors with the imagination change score (current-self) is not significantly different from zero, b = 0.072, p = 0.199.

6.6.3 Hyp 6: Effects summary

Gather all relevant effects:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp6_main <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp6_mod <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp6 <- df_table_hyp6_main %>% left_join(df_table_hyp6_mod)

Results summary across the Big Five traits: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion goals 0.532 1.511 0.001 0.063 0.128 0.324
extraversion frequency 0.703 2.021 0.000 0.076 0.153 0.090
agreeableness goals 0.655 3.090 0.000 0.022 0.090 0.362
agreeableness frequency 0.778 3.592 0.000 0.073 0.243 0.016
conscientiousness goals 0.662 1.845 0.000 0.002 0.008 0.936
conscientiousness frequency 0.714 1.972 0.000 0.090 0.176 0.018
neuroticism goals 0.808 1.622 0.000 0.085 0.198 0.071
neuroticism frequency 0.531 1.080 0.000 -0.066 -0.096 0.200
openness goals -0.076 -0.389 0.627 0.103 0.314 0.007
openness frequency 0.161 0.828 0.287 0.075 0.271 0.028

Four moderator effects significantly differ from zero:

  • changes in current-level agreeableness are moderated by the frequency of self-improvement behaviors
  • changes in current-level conscientiousness are moderated by the frequency of self-improvement behaviors
  • changes in current-level openness are moderated by the trait-specific change goals
  • changes in current-level openness are moderated by the frequency of self-improvement behaviors

Results summary across the Big Five facets: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability goals 0.832 1.560 0.000 -0.003 -0.008 0.920
sociability frequency 0.829 1.578 0.000 0.042 0.057 0.503
assertiveness goals 0.172 0.683 0.428 0.030 0.136 0.248
assertiveness frequency 0.360 1.473 0.035 0.071 0.206 0.129
energy goals 0.332 1.603 0.021 -0.001 -0.004 0.964
energy frequency 0.369 1.697 0.016 -0.050 -0.160 0.174
compassion goals 0.759 3.028 0.009 0.017 0.096 0.475
compassion frequency 0.947 3.805 0.000 0.127 0.369 0.010
respectfulness goals 1.019 3.062 0.001 0.032 0.130 0.162
respectfulness frequency 1.263 3.870 0.000 0.053 0.116 0.196
trust goals 0.399 1.224 0.048 -0.006 -0.026 0.786
trust frequency 0.422 1.310 0.032 -0.080 -0.178 0.125
organization goals 0.417 0.778 0.000 -0.005 -0.015 0.883
organization frequency 0.462 0.897 0.000 -0.099 -0.138 0.106
productiveness goals 0.411 1.088 0.009 -0.010 -0.034 0.722
productiveness frequency 0.447 1.195 0.006 -0.108 -0.204 0.029
responsibility goals 0.434 2.121 0.082 -0.005 -0.038 0.738
responsibility frequency 0.377 1.813 0.050 0.041 0.141 0.221
anxiety goals 1.403 2.502 0.000 -0.069 -0.187 0.073
anxiety frequency 0.948 1.661 0.000 0.072 0.090 0.316
depression goals 0.908 2.523 0.001 -0.036 -0.160 0.158
depression frequency 0.587 1.605 0.000 0.022 0.042 0.626
volatility goals 0.578 1.115 0.000 -0.012 -0.030 0.717
volatility frequency 0.560 1.080 0.000 -0.071 -0.097 0.256
curiosity goals 0.364 1.821 0.246 0.003 0.016 0.924
curiosity frequency 0.453 2.259 0.077 0.079 0.277 0.125
aesthetic goals 0.457 17.231 0.006 0.003 0.144 0.044
aesthetic frequency 0.533 22.761 0.003 0.007 0.213 0.023
imagination goals 0.224 0.639 0.385 0.037 0.150 0.118
imagination frequency 0.492 1.400 0.034 0.099 0.197 0.086

Looking at the facets, we find three moderator effects that significantly differ from zero:

  • Within agreeableness, we find the effect for the frequency of self-improvement behaviors from above only represented in the facet compassion.
  • The effect for conscientiousness is represented in one of the three facets, productiveness.
  • The effect seen above for openness is mirrored in the aesthetic score with both the change goal and the frequency of self-improvement behaviors.

Prepare data frame for plotting:

Show the code
df_table_hyp6_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp6_plot <- df_table_hyp6_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("current", levels = c("current"), labels = c("current"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • goals = specific, facet-level change goal(s) as moderator
  • frequency = frequency of self-improvement behavior as moderator
Show the code
ggplot(df_table_hyp6_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.7 H7: Desire to change and frequency of self-acceptance behaviors as moderators of change in personality in self-acceptance group (H3 in paper)

Desire to change and frequency of self-acceptance behaviors measured at the follow-up assessment will be positively related to change in ideal-self ratings in the self-acceptance group.

To test this hypothesis, we will estimate the mean-level difference in ideal trait ratings between baseline and follow up using a latent change model for each big five domain and facet. We will then include two moderators. The first will indicate how much the individual wanted to accept themselves on a given big five domain or facet. The second will indicate their frequency of self-acceptance behaviors. We will estimate the main effects of each of these variables and the interaction between these variables on the trait change score.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sa_mod <- df_sbsa %>% 
  filter(rando=="Self-Acceptance") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07", # facet-specific acceptance goals
                                  "sa04"))) %>% # frequency self-acceptance behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa07", "sa04")))) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, 
            sa04_01_t1, sa04_02_t1, sa04_03_t1)) # frequency of self-acceptance behaviors measured at T2

# colnames(df_sbsa_wide_pers_sa_mod)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sa_mod <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sa_mod)

6.7.1 Big Five traits

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goals

trait_template_mod_goal_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ goals           # This estimates the moderation effect on personality at T1
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), trait_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

trait_template_mod_frequ_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), trait_model_fit))
}  
6.7.1.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 6601.596 6701.678 0.98 0.036 0.04
# parameters of interest
params_lcs_extra_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.070 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.903 NA NA
d_extra_1 ~1 -0.038 -0.097 0.021 -0.096 -1.262 0.207
extra_t1 ~1 3.713 3.652 3.775 7.934 118.215 0.000
d_extra_1 ~~ d_extra_1 0.154 0.084 0.225 0.990 4.293 0.000
extra_t1 ~~ d_extra_1 -0.091 -0.139 -0.043 -0.497 -3.731 0.000
extra_t1 ~ goals 0.013 -0.080 0.106 0.026 0.277 0.782
d_extra_1 ~ goals -0.043 -0.139 0.053 -0.100 -0.873 0.383
goals ~~ goals 0.845 0.451 1.238 1.000 4.209 0.000

The moderation effect of specific, facet-level acceptance goals with the extraversion change score (ideal-self) is not significantly different from zero, b = -0.043, p = 0.383.

6.7.1.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 6005.376 6105.459 0.982 0.038 0.045
# parameters of interest
params_lcs_extra_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.074 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.902 NA NA
d_extra_1 ~1 -0.037 -0.094 0.021 -0.096 -1.255 0.210
extra_t1 ~1 3.713 3.652 3.774 8.114 118.930 0.000
d_extra_1 ~~ d_extra_1 0.148 0.081 0.214 0.999 4.358 0.000
extra_t1 ~~ d_extra_1 -0.088 -0.135 -0.042 -0.511 -3.700 0.000
extra_t1 ~ frequ 0.102 0.008 0.195 0.169 2.133 0.033
d_extra_1 ~ frequ 0.011 -0.072 0.095 0.023 0.269 0.788
frequ ~~ frequ 0.582 0.393 0.771 1.000 6.033 0.000

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score (ideal-self) is not significantly different from zero, b = 0.011, p = 0.788.

6.7.1.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 6447.578 6547.661 0.99 0.033 0.041
# parameters of interest
params_lcs_agree_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.988 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.674 NA NA
d_agree_1 ~1 -0.012 -0.057 0.034 -0.037 -0.511 0.609
agree_t1 ~1 3.705 3.631 3.779 7.923 98.601 0.000
d_agree_1 ~~ d_agree_1 0.101 0.062 0.141 0.994 4.997 0.000
agree_t1 ~~ d_agree_1 -0.047 -0.077 -0.017 -0.318 -3.097 0.002
agree_t1 ~ goals -0.054 -0.164 0.056 -0.082 -0.957 0.339
d_agree_1 ~ goals 0.034 -0.063 0.131 0.076 0.688 0.491
goals ~~ goals 0.502 0.181 0.824 1.000 3.063 0.002

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score (ideal-self) is not significantly different from zero, b = 0.034, p = 0.491.

6.7.1.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5994.798 6094.88 0.979 0.051 0.056
# parameters of interest
params_lcs_agree_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.989 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.676 NA NA
d_agree_1 ~1 -0.011 -0.056 0.034 -0.035 -0.486 0.627
agree_t1 ~1 3.705 3.631 3.778 8.075 98.699 0.000
d_agree_1 ~~ d_agree_1 0.098 0.059 0.136 0.993 4.929 0.000
agree_t1 ~~ d_agree_1 -0.051 -0.081 -0.021 -0.376 -3.308 0.001
agree_t1 ~ frequ 0.205 0.120 0.291 0.342 4.722 0.000
d_agree_1 ~ frequ 0.034 -0.030 0.097 0.082 1.029 0.304
frequ ~~ frequ 0.582 0.400 0.764 1.000 6.257 0.000

The frequency of self-acceptance behaviors significantly moderates changes in agreeableness (ideal-self), b = 0.034, p = 0.304.

6.7.1.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 6093.112 6193.194 0.999 0.01 0.033
# parameters of interest
params_lcs_consc_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.045 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.738 NA NA
d_consc_1 ~1 0.017 -0.031 0.066 0.050 0.700 0.484
consc_t1 ~1 4.377 4.319 4.435 8.899 148.438 0.000
d_consc_1 ~~ d_consc_1 0.121 0.059 0.183 1.000 3.810 0.000
consc_t1 ~~ d_consc_1 -0.070 -0.134 -0.007 -0.418 -2.175 0.030
consc_t1 ~ goals -0.066 -0.120 -0.012 -0.151 -2.401 0.016
d_consc_1 ~ goals 0.000 -0.043 0.042 -0.001 -0.019 0.985
goals ~~ goals 1.264 0.955 1.572 1.000 8.025 0.000

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score (ideal-self) is not significantly different from zero, b = 0, p = 0.985.

6.7.1.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5601.08 5701.162 0.988 0.036 0.04
# parameters of interest
params_lcs_consc_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.045 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.737 NA NA
d_consc_1 ~1 0.018 -0.031 0.067 0.051 0.713 0.476
consc_t1 ~1 4.377 4.319 4.435 8.851 148.369 0.000
d_consc_1 ~~ d_consc_1 0.121 0.059 0.183 0.998 3.842 0.000
consc_t1 ~~ d_consc_1 -0.074 -0.135 -0.012 -0.448 -2.333 0.020
consc_t1 ~ frequ 0.198 0.111 0.285 0.301 4.476 0.000
d_consc_1 ~ frequ 0.022 -0.052 0.097 0.048 0.586 0.558
frequ ~~ frequ 0.566 0.382 0.749 1.000 6.054 0.000

The frequency of self-acceptance behaviors significantly moderates changes in conscientiousness (ideal-self), b = 0.022, p = 0.558.

6.7.1.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 6247.27 6347.353 0.971 0.049 0.049
# parameters of interest
params_lcs_neuro_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.938 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.780 NA NA
d_neuro_1 ~1 0.011 -0.037 0.059 0.034 0.445 0.656
neuro_t1 ~1 1.646 1.595 1.697 4.228 63.227 0.000
d_neuro_1 ~~ d_neuro_1 0.103 0.054 0.151 0.981 4.166 0.000
neuro_t1 ~~ d_neuro_1 -0.042 -0.070 -0.014 -0.338 -2.930 0.003
neuro_t1 ~ goals 0.003 -0.056 0.062 0.006 0.105 0.917
d_neuro_1 ~ goals 0.056 -0.019 0.130 0.136 1.462 0.144
goals ~~ goals 0.632 0.175 1.089 1.000 2.713 0.007

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score (ideal-self) is not significantly different from zero, b = 0.056, p = 0.144.

6.7.1.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5708.413 5808.495 0.986 0.035 0.045
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.937 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.781 NA NA
d_neuro_1 ~1 0.011 -0.038 0.059 0.032 0.427 0.669
neuro_t1 ~1 1.646 1.595 1.697 4.183 63.132 0.000
d_neuro_1 ~~ d_neuro_1 0.107 0.056 0.158 0.999 4.123 0.000
neuro_t1 ~~ d_neuro_1 -0.044 -0.073 -0.015 -0.346 -2.938 0.003
neuro_t1 ~ frequ -0.092 -0.169 -0.015 -0.178 -2.341 0.019
d_neuro_1 ~ frequ -0.016 -0.086 0.053 -0.038 -0.465 0.642
frequ ~~ frequ 0.583 0.391 0.774 1.000 5.968 0.000

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score (ideal-self) is not significantly different from zero, b = -0.016, p = 0.642.

6.7.1.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 6392.341 6492.424 0.99 0.033 0.033
# parameters of interest
params_lcs_openn_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.966 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.638 NA NA
d_openn_1 ~1 -0.013 -0.053 0.026 -0.057 -0.665 0.506
openn_t1 ~1 3.811 3.752 3.870 10.652 126.434 0.000
d_openn_1 ~~ d_openn_1 0.056 0.028 0.083 0.996 3.978 0.000
openn_t1 ~~ d_openn_1 -0.023 -0.039 -0.006 -0.271 -2.704 0.007
openn_t1 ~ goals -0.071 -0.138 -0.004 -0.148 -2.072 0.038
d_openn_1 ~ goals 0.019 -0.037 0.075 0.061 0.676 0.499
goals ~~ goals 0.562 0.340 0.783 1.000 4.977 0.000

The moderation effect of specific, facet-level acceptance goals with the openness change score (ideal-self) is not significantly different from zero, b = 0.019, p = 0.499.

6.7.1.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 6011.516 6111.598 0.99 0.03 0.037
# parameters of interest
params_lcs_openn_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.966 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.639 NA NA
d_openn_1 ~1 -0.013 -0.053 0.027 -0.056 -0.650 0.515
openn_t1 ~1 3.811 3.752 3.870 10.633 126.454 0.000
d_openn_1 ~~ d_openn_1 0.056 0.029 0.083 0.996 4.015 0.000
openn_t1 ~~ d_openn_1 -0.024 -0.041 -0.008 -0.294 -2.913 0.004
openn_t1 ~ frequ 0.085 0.017 0.152 0.181 2.456 0.014
d_openn_1 ~ frequ 0.020 -0.037 0.077 0.065 0.686 0.493
frequ ~~ frequ 0.588 0.400 0.777 1.000 6.128 0.000

The moderation effect of frequency of self-acceptance behaviors with the openness change score (ideal-self) is not significantly different from zero, b = 0.02, p = 0.493.

6.7.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goal

facet_template_mod_goal_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ ind_goal        # This estimates the moderation effect on personality at T1
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), facet_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

facet_template_mod_frequ_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), facet_model_fit))
}  
6.7.2.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8327.268 8415.803 0.956 0.047 0.048
# parameters of interest
params_lcs_socia_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.048 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.744 NA NA
d_socia_1 ~1 -0.005 -0.136 0.125 -0.020 -0.078 0.938
socia_t1 ~1 4.230 4.071 4.390 11.776 51.999 0.000
d_socia_1 ~~ d_socia_1 0.064 0.018 0.111 0.992 2.706 0.007
socia_t1 ~~ d_socia_1 -0.037 -0.062 -0.013 -0.412 -2.955 0.003
d_socia_1 ~ sa07_01_t1 -0.017 -0.055 0.022 -0.090 -0.839 0.401
sa07_01_t1 ~~ sa07_01_t1 1.904 1.711 2.098 1.000 19.272 0.000

The moderation effect of the facet-specific acceptance goal with the sociability change score (ideal-self) is not significantly different from zero, b = -0.017, p = 0.401.

6.7.2.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10014.04 10129.52 0.973 0.035 0.049
# parameters of interest
params_lcs_socia_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.050 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.748 NA NA
d_socia_1 ~1 -0.058 -0.106 -0.009 -0.229 -2.327 0.020
socia_t1 ~1 4.321 4.249 4.392 12.216 118.396 0.000
d_socia_1 ~~ d_socia_1 0.063 0.017 0.109 0.993 2.666 0.008
socia_t1 ~~ d_socia_1 -0.038 -0.063 -0.012 -0.424 -2.922 0.003
socia_t1 ~ frequ -0.007 -0.087 0.074 -0.015 -0.168 0.866
d_socia_1 ~ frequ -0.028 -0.099 0.043 -0.084 -0.767 0.443
frequ ~~ frequ 0.576 0.390 0.761 1.000 6.089 0.000

The moderation effect of the frequency of self-acceptance behaviors with sociability change score (ideal-self) is not significantly different from zero, b = -0.028, p = 0.443.

6.7.2.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8585.716 8674.25 0.998 0.01 0.034
# parameters of interest
params_lcs_asser_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.010 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.748 NA NA
d_asser_1 ~1 0.028 -0.070 0.125 0.135 0.553 0.580
asser_t1 ~1 4.106 3.976 4.235 14.922 61.986 0.000
d_asser_1 ~~ d_asser_1 0.041 0.004 0.078 0.983 2.151 0.031
asser_t1 ~~ d_asser_1 -0.021 -0.043 0.002 -0.376 -1.828 0.068
d_asser_1 ~ sa07_02_t1 -0.019 -0.047 0.008 -0.132 -1.398 0.162
sa07_02_t1 ~~ sa07_02_t1 1.902 1.715 2.088 1.000 19.966 0.000

The moderation effect of the facet-specific acceptance goal with the assertiveness change score (ideal-self) is not significantly different from zero, b = -0.019, p = 0.162.

6.7.2.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10254.65 10370.13 0.994 0.015 0.035
# parameters of interest
params_lcs_asser_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.008 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.742 NA NA
d_asser_1 ~1 -0.033 -0.071 0.004 -0.164 -1.744 0.081
asser_t1 ~1 4.163 4.072 4.253 15.106 89.805 0.000
d_asser_1 ~~ d_asser_1 0.040 0.004 0.076 0.969 2.164 0.030
asser_t1 ~~ d_asser_1 -0.023 -0.047 0.000 -0.435 -1.941 0.052
asser_t1 ~ frequ 0.081 0.008 0.155 0.221 2.163 0.031
d_asser_1 ~ frequ 0.047 -0.007 0.102 0.175 1.695 0.090
frequ ~~ frequ 0.563 0.378 0.747 1.000 5.973 0.000

The frequency of self-acceptance behaviors significantly moderates changes in assertiveness (ideal-self), b = 0.047, p = 0.09.

6.7.2.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7951.326 8039.86 0.912 0.05 0.06
# parameters of interest
params_lcs_energ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.105 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.930 NA NA
d_energ_1 ~1 -0.126 -0.291 0.039 -0.532 -1.492 0.136
energ_t1 ~1 2.473 2.309 2.637 8.790 29.552 0.000
d_energ_1 ~~ d_energ_1 0.054 -0.030 0.138 0.956 1.251 0.211
energ_t1 ~~ d_energ_1 -0.033 -0.093 0.026 -0.517 -1.096 0.273
d_energ_1 ~ sa07_03_t1 0.035 -0.008 0.079 0.209 1.599 0.110
sa07_03_t1 ~~ sa07_03_t1 1.954 1.765 2.144 1.000 20.241 0.000

The moderation effect of the facet-specific acceptance goal with the energy change score (ideal-self) is not significantly different from zero, b = 0.035, p = 0.11.

6.7.2.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9607.103 9722.583 0.94 0.046 0.057
# parameters of interest
params_lcs_energ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.081 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.911 NA NA
d_energ_1 ~1 -0.011 -0.054 0.033 -0.047 -0.476 0.634
energ_t1 ~1 2.391 2.275 2.507 8.863 40.394 0.000
d_energ_1 ~~ d_energ_1 0.052 -0.028 0.131 1.000 1.273 0.203
energ_t1 ~~ d_energ_1 -0.031 -0.088 0.025 -0.540 -1.078 0.281
energ_t1 ~ frequ -0.120 -0.200 -0.041 -0.338 -2.964 0.003
d_energ_1 ~ frequ -0.001 -0.057 0.055 -0.004 -0.040 0.968
frequ ~~ frequ 0.576 0.395 0.758 1.000 6.231 0.000

The moderation effect of the frequency of self-acceptance behaviors with the energy change score (ideal-self) is not significantly different from zero, b = -0.001, p = 0.968.

6.7.2.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8928.646 9017.181 1 0 0.032
# parameters of interest
params_lcs_compa_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.019 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.592 NA NA
d_compa_1 ~1 0.077 -0.062 0.216 0.231 1.088 0.277
compa_t1 ~1 4.268 4.101 4.435 7.409 50.018 0.000
d_compa_1 ~~ d_compa_1 0.108 0.003 0.212 0.962 2.025 0.043
compa_t1 ~~ d_compa_1 -0.063 -0.133 0.008 -0.331 -1.734 0.083
d_compa_1 ~ sa07_04_t1 -0.050 -0.106 0.006 -0.194 -1.757 0.079
sa07_04_t1 ~~ sa07_04_t1 1.690 1.511 1.870 1.000 18.458 0.000

The moderation effect of the facet-specific acceptance goal with the compassion change score (ideal-self) is not significantly different from zero, b = -0.05, p = 0.079.

6.7.2.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10637.48 10752.96 0.975 0.032 0.052
# parameters of interest
params_lcs_compa_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.013 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.587 NA NA
d_compa_1 ~1 -0.041 -0.113 0.032 -0.119 -1.101 0.271
compa_t1 ~1 4.255 4.163 4.348 7.223 90.296 0.000
d_compa_1 ~~ d_compa_1 0.113 0.004 0.222 0.970 2.028 0.043
compa_t1 ~~ d_compa_1 -0.050 -0.118 0.018 -0.270 -1.430 0.153
compa_t1 ~ frequ 0.290 0.144 0.436 0.374 3.899 0.000
d_compa_1 ~ frequ -0.078 -0.210 0.053 -0.174 -1.164 0.244
frequ ~~ frequ 0.578 0.391 0.764 1.000 6.081 0.000

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score (ideal-self) is not significantly different from zero, b = -0.078, p = 0.244.

6.7.2.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7190.198 7278.733 0.934 0.058 0.057
# parameters of interest
params_lcs_respe_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.954 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.663 NA NA
d_respe_1 ~1 -0.015 -0.093 0.063 -0.062 -0.372 0.710
respe_t1 ~1 4.752 4.669 4.835 13.912 112.525 0.000
d_respe_1 ~~ d_respe_1 0.056 0.014 0.099 0.996 2.594 0.009
respe_t1 ~~ d_respe_1 -0.022 -0.054 0.011 -0.271 -1.318 0.187
d_respe_1 ~ sa07_05_t1 0.011 -0.027 0.050 0.061 0.580 0.562
sa07_05_t1 ~~ sa07_05_t1 1.620 1.354 1.887 1.000 11.922 0.000

The moderation effect of the facet-specific acceptance goal with the respectfulness change score (ideal-self) is not significantly different from zero, b = 0.011, p = 0.562.

6.7.2.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 8898.344 9013.824 0.963 0.043 0.049
# parameters of interest
params_lcs_respe_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.951 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.662 NA NA
d_respe_1 ~1 0.007 -0.038 0.052 0.030 0.313 0.754
respe_t1 ~1 4.672 4.613 4.731 13.620 156.370 0.000
d_respe_1 ~~ d_respe_1 0.055 0.013 0.098 0.973 2.534 0.011
respe_t1 ~~ d_respe_1 -0.027 -0.060 0.006 -0.357 -1.617 0.106
respe_t1 ~ frequ 0.160 0.090 0.229 0.350 4.482 0.000
d_respe_1 ~ frequ 0.052 -0.010 0.115 0.165 1.639 0.101
frequ ~~ frequ 0.565 0.387 0.743 1.000 6.221 0.000

The frequency of self-acceptance behaviors significantly moderates changes in respectfulness (ideal-self), b = 0.052, p = 0.101.

6.7.2.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8579.564 8668.098 0.958 0.046 0.042
# parameters of interest
params_lcs_trust_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.980 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.642 NA NA
d_trust_1 ~1 -0.008 -0.119 0.103 -0.029 -0.144 0.886
trust_t1 ~1 1.967 1.828 2.107 4.564 27.678 0.000
d_trust_1 ~~ d_trust_1 0.079 0.028 0.130 0.995 3.056 0.002
trust_t1 ~~ d_trust_1 -0.035 -0.071 0.001 -0.293 -1.930 0.054
d_trust_1 ~ sa07_06_t1 0.015 -0.026 0.055 0.072 0.711 0.477
sa07_06_t1 ~~ sa07_06_t1 1.934 1.748 2.120 1.000 20.380 0.000

The moderation effect of the facet-specific acceptance goal with the trust change score (ideal-self) is not significantly different from zero, b = 0.015, p = 0.477.

6.7.2.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10243.41 10358.89 0.925 0.062 0.06
# parameters of interest
params_lcs_trust_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.989 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.643 NA NA
d_trust_1 ~1 0.029 -0.027 0.085 0.100 1.019 0.308
trust_t1 ~1 1.905 1.811 2.000 4.259 39.564 0.000
d_trust_1 ~~ d_trust_1 0.084 0.032 0.136 0.992 3.147 0.002
trust_t1 ~~ d_trust_1 -0.043 -0.082 -0.005 -0.345 -2.194 0.028
trust_t1 ~ frequ -0.153 -0.264 -0.042 -0.262 -2.712 0.007
d_trust_1 ~ frequ -0.034 -0.121 0.052 -0.090 -0.776 0.438
frequ ~~ frequ 0.585 0.396 0.773 1.000 6.086 0.000

The moderation effect of the frequency of self-acceptance behaviors with the trust change score (ideal-self) is not significantly different from zero, b = -0.034, p = 0.438.

6.7.2.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7505.15 7593.684 0.941 0.049 0.049
# parameters of interest
params_lcs_organ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.037 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.825 NA NA
d_organ_1 ~1 0.026 -0.042 0.094 0.122 0.743 0.458
organ_t1 ~1 1.599 1.479 1.719 6.026 26.171 0.000
d_organ_1 ~~ d_organ_1 0.044 0.003 0.085 0.996 2.119 0.034
organ_t1 ~~ d_organ_1 -0.024 -0.045 -0.003 -0.439 -2.218 0.027
d_organ_1 ~ sa07_07_t1 -0.008 -0.032 0.015 -0.060 -0.704 0.482
sa07_07_t1 ~~ sa07_07_t1 2.291 2.110 2.471 1.000 24.892 0.000

The moderation effect of the facet-specific acceptance goal with the organization change score (ideal-self) is not significantly different from zero, b = -0.008, p = 0.482.

6.7.2.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9099.481 9214.961 0.971 0.035 0.044
# parameters of interest
params_lcs_organ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.035 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.831 NA NA
d_organ_1 ~1 0.001 -0.030 0.032 0.005 0.061 0.951
organ_t1 ~1 1.696 1.607 1.785 6.932 37.384 0.000
d_organ_1 ~~ d_organ_1 0.038 0.002 0.074 0.977 2.062 0.039
organ_t1 ~~ d_organ_1 -0.024 -0.045 -0.002 -0.521 -2.186 0.029
organ_t1 ~ frequ -0.101 -0.163 -0.039 -0.308 -3.210 0.001
d_organ_1 ~ frequ -0.040 -0.090 0.011 -0.151 -1.537 0.124
frequ ~~ frequ 0.554 0.376 0.732 1.000 6.089 0.000

The frequency of self-acceptance behaviors significantly moderates changes in organization (ideal-self), b = -0.04, p = 0.124.

6.7.2.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 6971.356 7059.89 0.879 0.068 0.065
# parameters of interest
params_lcs_produ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.085 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.742 NA NA
d_produ_1 ~1 -0.018 -0.130 0.093 -0.068 -0.324 0.746
produ_t1 ~1 1.572 1.446 1.698 3.972 24.500 0.000
d_produ_1 ~~ d_produ_1 0.073 0.012 0.134 1.000 2.360 0.018
produ_t1 ~~ d_produ_1 -0.048 -0.098 0.001 -0.451 -1.907 0.057
d_produ_1 ~ sa07_08_t1 -0.002 -0.033 0.028 -0.012 -0.150 0.881
sa07_08_t1 ~~ sa07_08_t1 2.019 1.832 2.206 1.000 21.144 0.000

The moderation effect of the facet-specific acceptance goal with the productiveness change score (ideal-self) is not significantly different from zero, b = -0.002, p = 0.881.

6.7.2.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 8621.049 8736.528 0.944 0.047 0.057
# parameters of interest
params_lcs_produ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.080 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.739 NA NA
d_produ_1 ~1 -0.026 -0.077 0.025 -0.097 -0.998 0.318
produ_t1 ~1 1.612 1.536 1.689 4.097 41.320 0.000
d_produ_1 ~~ d_produ_1 0.071 0.012 0.129 0.972 2.348 0.019
produ_t1 ~~ d_produ_1 -0.050 -0.100 -0.001 -0.491 -2.005 0.045
produ_t1 ~ frequ -0.091 -0.164 -0.018 -0.176 -2.456 0.014
d_produ_1 ~ frequ -0.059 -0.136 0.018 -0.167 -1.510 0.131
frequ ~~ frequ 0.579 0.391 0.767 1.000 6.037 0.000

The frequency of self-acceptance behaviors significantly moderates changes in productiveness (ideal-self), b = -0.059, p = 0.131.

6.7.2.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7947.793 8036.328 0.982 0.028 0.043
# parameters of interest
params_lcs_respo_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.053 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.787 NA NA
d_respo_1 ~1 0.045 -0.091 0.181 0.120 0.648 0.517
respo_t1 ~1 4.364 4.198 4.530 8.693 51.651 0.000
d_respo_1 ~~ d_respo_1 0.141 0.032 0.249 1.000 2.547 0.011
respo_t1 ~~ d_respo_1 -0.083 -0.154 -0.012 -0.443 -2.303 0.021
d_respo_1 ~ sa07_09_t1 -0.006 -0.051 0.040 -0.021 -0.240 0.811
sa07_09_t1 ~~ sa07_09_t1 2.074 1.885 2.262 1.000 21.609 0.000

The moderation effect of the facet-specific acceptance goal with the responsibility change score (ideal-self) is not significantly different from zero, b = -0.006, p = 0.811.

6.7.2.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9589.959 9705.439 0.976 0.033 0.046
# parameters of interest
params_lcs_respo_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.051 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.789 NA NA
d_respo_1 ~1 0.030 -0.034 0.095 0.080 0.920 0.358
respo_t1 ~1 4.275 4.175 4.375 8.510 83.578 0.000
d_respo_1 ~~ d_respo_1 0.142 0.036 0.248 1.000 2.616 0.009
respo_t1 ~~ d_respo_1 -0.083 -0.153 -0.014 -0.460 -2.340 0.019
respo_t1 ~ frequ 0.190 0.078 0.303 0.287 3.317 0.001
d_respo_1 ~ frequ 0.004 -0.089 0.098 0.009 0.090 0.929
frequ ~~ frequ 0.573 0.386 0.761 1.000 5.980 0.000

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score (ideal-self) is not significantly different from zero, b = 0.004, p = 0.929.

6.7.2.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8564.163 8652.697 0.9 0.046 0.047
# parameters of interest
params_lcs_anxie_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.859 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.766 NA NA
d_anxie_1 ~1 -0.049 -0.192 0.094 -0.192 -0.673 0.501
anxie_t1 ~1 4.536 4.415 4.657 15.841 73.377 0.000
d_anxie_1 ~~ d_anxie_1 0.065 -0.029 0.160 1.000 1.352 0.176
anxie_t1 ~~ d_anxie_1 -0.018 -0.057 0.021 -0.247 -0.894 0.372
d_anxie_1 ~ sa07_10_t1 0.001 -0.044 0.046 0.006 0.043 0.966
sa07_10_t1 ~~ sa07_10_t1 2.097 1.913 2.282 1.000 22.295 0.000

The moderation effect of the facet-specific acceptance goal with the anxiety change score (ideal-self) is not significantly different from zero, b = 0.001, p = 0.966.

6.7.2.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10207.23 10322.71 0.921 0.048 0.056
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.875 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.737 NA NA
d_anxie_1 ~1 -0.047 -0.105 0.011 -0.193 -1.601 0.109
anxie_t1 ~1 4.568 4.503 4.633 15.703 138.509 0.000
d_anxie_1 ~~ d_anxie_1 0.060 -0.037 0.157 0.997 1.205 0.228
anxie_t1 ~~ d_anxie_1 -0.016 -0.053 0.021 -0.234 -0.833 0.405
anxie_t1 ~ frequ 0.116 0.029 0.202 0.304 2.631 0.009
d_anxie_1 ~ frequ -0.018 -0.106 0.071 -0.055 -0.387 0.699
frequ ~~ frequ 0.585 0.395 0.775 1.000 6.030 0.000

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score (ideal-self) is not significantly different from zero, b = -0.018, p = 0.699.

6.7.2.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7032.067 7120.602 0.83 0.082 0.072
# parameters of interest
params_lcs_depre_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.062 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.811 NA NA
d_depre_1 ~1 -0.021 -0.108 0.066 -0.095 -0.474 0.635
depre_t1 ~1 4.482 4.381 4.584 15.397 86.460 0.000
d_depre_1 ~~ d_depre_1 0.049 0.003 0.095 0.993 2.107 0.035
depre_t1 ~~ d_depre_1 -0.029 -0.057 0.000 -0.451 -1.980 0.048
d_depre_1 ~ sa07_11_t1 0.013 -0.014 0.040 0.086 0.935 0.350
sa07_11_t1 ~~ sa07_11_t1 2.217 2.036 2.399 1.000 23.940 0.000

The moderation effect of the facet-specific acceptance goal with the depression change score (ideal-self) is not significantly different from zero, b = 0.013, p = 0.35.

6.7.2.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 8666.308 8781.788 0.878 0.071 0.069
# parameters of interest
params_lcs_depre_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.062 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.811 NA NA
d_depre_1 ~1 0.018 -0.018 0.055 0.082 0.978 0.328
depre_t1 ~1 4.409 4.345 4.474 14.905 133.496 0.000
d_depre_1 ~~ d_depre_1 0.051 0.003 0.098 0.993 2.090 0.037
depre_t1 ~~ d_depre_1 -0.031 -0.061 -0.001 -0.464 -2.028 0.043
depre_t1 ~ frequ 0.026 -0.036 0.087 0.067 0.825 0.409
d_depre_1 ~ frequ 0.024 -0.033 0.081 0.082 0.838 0.402
frequ ~~ frequ 0.583 0.392 0.774 1.000 5.984 0.000

The moderation effect of the frequency of self-acceptance behaviors with the depression change score (ideal-self) is not significantly different from zero, b = 0.024, p = 0.402.

6.7.2.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7993.789 8082.323 0.953 0.039 0.046
# parameters of interest
params_lcs_volat_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.911 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.668 NA NA
d_volat_1 ~1 0.086 -0.054 0.227 0.273 1.207 0.227
volat_t1 ~1 1.662 1.509 1.815 3.849 21.272 0.000
d_volat_1 ~~ d_volat_1 0.099 0.021 0.177 0.990 2.491 0.013
volat_t1 ~~ d_volat_1 -0.030 -0.083 0.022 -0.223 -1.132 0.258
d_volat_1 ~ sa07_12_t1 -0.024 -0.073 0.025 -0.098 -0.967 0.334
sa07_12_t1 ~~ sa07_12_t1 1.682 1.503 1.861 1.000 18.422 0.000

The moderation effect of the facet-specific acceptance goal with the volatility change score (ideal-self) is not significantly different from zero, b = -0.024, p = 0.334.

6.7.2.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9710.113 9825.592 0.983 0.025 0.046
# parameters of interest
params_lcs_volat_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.913 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.667 NA NA
d_volat_1 ~1 0.020 -0.039 0.079 0.067 0.667 0.505
volat_t1 ~1 1.704 1.624 1.785 4.124 41.364 0.000
d_volat_1 ~~ d_volat_1 0.090 0.019 0.160 0.983 2.492 0.013
volat_t1 ~~ d_volat_1 -0.032 -0.080 0.017 -0.264 -1.291 0.197
volat_t1 ~ frequ -0.115 -0.203 -0.026 -0.210 -2.539 0.011
d_volat_1 ~ frequ -0.053 -0.140 0.035 -0.132 -1.179 0.238
frequ ~~ frequ 0.571 0.384 0.758 1.000 5.990 0.000

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score (ideal-self) is significantly different from zero, b = -0.053, p = 0.238.

6.7.2.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8453.219 8541.754 0.986 0.021 0.041
# parameters of interest
params_lcs_curio_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.045 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.686 NA NA
d_curio_1 ~1 0.033 -0.057 0.122 0.165 0.721 0.471
curio_t1 ~1 4.572 4.470 4.675 15.070 87.448 0.000
d_curio_1 ~~ d_curio_1 0.039 -0.006 0.085 0.997 1.696 0.090
curio_t1 ~~ d_curio_1 -0.024 -0.049 0.001 -0.407 -1.898 0.058
d_curio_1 ~ sa07_13_t1 -0.009 -0.045 0.028 -0.059 -0.464 0.643
sa07_13_t1 ~~ sa07_13_t1 1.817 1.605 2.030 1.000 16.764 0.000

The moderation effect of the facet-specific acceptance goal with the curiosity change score (ideal-self) is not significantly different from zero, b = -0.009, p = 0.643.

6.7.2.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10156.61 10272.09 0.986 0.022 0.043
# parameters of interest
params_lcs_curio_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.043 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.685 NA NA
d_curio_1 ~1 0.013 -0.030 0.056 0.065 0.602 0.547
curio_t1 ~1 4.494 4.427 4.561 14.718 130.915 0.000
d_curio_1 ~~ d_curio_1 0.040 -0.006 0.086 0.995 1.697 0.090
curio_t1 ~~ d_curio_1 -0.024 -0.050 0.001 -0.405 -1.863 0.063
curio_t1 ~ frequ 0.057 -0.017 0.132 0.145 1.503 0.133
d_curio_1 ~ frequ 0.018 -0.057 0.092 0.067 0.462 0.644
frequ ~~ frequ 0.592 0.401 0.782 1.000 6.086 0.000

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.018, p = 0.644.

6.7.2.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8536.79 8625.324 0.986 0.032 0.041
# parameters of interest
params_lcs_aesth_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.948 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.670 NA NA
d_aesth_1 ~1 0.000 -0.007 0.008 0.015 0.094 0.925
aesth_t1 ~1 3.206 3.077 3.336 90.898 48.618 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.999 4.204 0.000
aesth_t1 ~~ d_aesth_1 0.000 -0.001 0.000 -0.273 -1.781 0.075
d_aesth_1 ~ sa07_14_t1 -0.001 -0.003 0.002 -0.033 -0.414 0.679
sa07_14_t1 ~~ sa07_14_t1 1.920 1.736 2.104 1.000 20.436 0.000

The moderation effect of the facet-specific acceptance goal with the aesthetic change score (ideal-self) is not significantly different from zero, b = -0.001, p = 0.679.

6.7.2.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10206.37 10321.85 0.981 0.035 0.046
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.952 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.672 NA NA
d_aesth_1 ~1 -0.001 -0.005 0.003 -0.044 -0.574 0.566
aesth_t1 ~1 3.208 3.079 3.338 92.276 48.628 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.985 4.195 0.000
aesth_t1 ~~ d_aesth_1 0.000 -0.001 0.000 -0.308 -1.943 0.052
aesth_t1 ~ frequ 0.008 0.002 0.014 0.177 2.643 0.008
d_aesth_1 ~ frequ 0.004 -0.002 0.010 0.122 1.356 0.175
frequ ~~ frequ 0.571 0.385 0.757 1.000 6.020 0.000

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score (ideal-self) is not significantly different from zero, b = 0.004, p = 0.175.

6.7.2.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (*sa07_$$_t1* = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7902.874 7991.408 0.932 0.048 0.055
# parameters of interest
params_lcs_imagi_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.875 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.550 NA NA
d_imagi_1 ~1 -0.082 -0.173 0.010 -0.398 -1.754 0.079
imagi_t1 ~1 4.672 4.574 4.770 14.298 93.437 0.000
d_imagi_1 ~~ d_imagi_1 0.042 0.000 0.084 0.990 1.963 0.050
imagi_t1 ~~ d_imagi_1 -0.004 -0.033 0.025 -0.061 -0.272 0.786
d_imagi_1 ~ sa07_15_t1 0.014 -0.017 0.045 0.098 0.884 0.377
sa07_15_t1 ~~ sa07_15_t1 2.081 1.900 2.263 1.000 22.520 0.000

The moderation effect of the facet-specific acceptance goal with the imagination change score (ideal-self) is not significantly different from zero, b = 0.014, p = 0.377.

6.7.2.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9553.944 9669.424 0.947 0.044 0.052
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.873 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.554 NA NA
d_imagi_1 ~1 -0.044 -0.093 0.005 -0.210 -1.778 0.075
imagi_t1 ~1 4.604 4.544 4.664 13.829 150.953 0.000
d_imagi_1 ~~ d_imagi_1 0.045 0.001 0.088 0.999 1.993 0.046
imagi_t1 ~~ d_imagi_1 -0.005 -0.037 0.026 -0.077 -0.327 0.743
imagi_t1 ~ frequ 0.084 0.002 0.166 0.190 1.997 0.046
d_imagi_1 ~ frequ 0.006 -0.068 0.081 0.023 0.171 0.864
frequ ~~ frequ 0.572 0.382 0.762 1.000 5.910 0.000

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score (ideal-self) is not significantly different from zero, b = 0.006, p = 0.864.

6.7.3 Hyp 7: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp7_main <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp7_mod <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp7 <- df_table_hyp7_main %>% left_join(df_table_hyp7_mod)

Results summary across the Big Five traits: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion goals 1.513 3.831 0.000 -0.037 -0.087 0.380
extraversion frequency 1.579 4.107 0.000 0.056 0.110 0.153
agreeableness goals 0.793 2.485 0.000 0.022 0.050 0.598
agreeableness frequency 0.999 3.188 0.000 0.090 0.218 0.012
conscientiousness goals 1.323 3.809 0.003 -0.020 -0.065 0.330
conscientiousness frequency 1.465 4.200 0.001 0.088 0.189 0.030
neuroticism goals 0.469 1.449 0.000 0.056 0.139 0.119
neuroticism frequency 0.493 1.504 0.000 -0.043 -0.101 0.190
openness goals 0.674 2.854 0.010 0.007 0.021 0.811
openness frequency 0.738 3.116 0.005 0.037 0.119 0.194

Two moderator effects that are significantly different from zero:

  • The frequency of self-acceptance behaviors moderates changes in ideal-level agreeableness.
  • Frequency of self-acceptance behaviors also moderates changes in ideal-level conscientiousness.

Results summary across the Big Five facets: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability goals 1.235 4.845 0.001 -0.008 -0.045 0.648
sociability frequency 1.242 4.934 0.001 -0.030 -0.090 0.350
assertiveness goals 1.167 5.727 0.003 -0.014 -0.098 0.261
assertiveness frequency 1.313 6.473 0.001 0.074 0.272 0.015
energy goals 0.935 3.950 0.004 0.025 0.146 0.112
energy frequency 1.146 5.041 0.002 -0.059 -0.198 0.137
compassion goals 0.883 2.637 0.033 -0.051 -0.198 0.058
compassion frequency 0.666 1.954 0.145 -0.030 -0.067 0.673
respectfulness goals 0.889 3.744 0.087 0.003 0.019 0.852
respectfulness frequency 1.231 5.155 0.018 0.094 0.297 0.012
trust goals 0.369 1.307 0.029 0.010 0.050 0.600
trust frequency 0.470 1.614 0.005 -0.070 -0.183 0.120
organization goals 0.593 2.811 0.000 0.003 0.023 0.745
organization frequency 0.738 3.758 0.000 -0.084 -0.318 0.005
productiveness goals 0.467 1.726 0.012 0.001 0.007 0.924
productiveness frequency 0.516 1.917 0.008 -0.090 -0.254 0.018
responsibility goals 1.497 3.991 0.002 -0.017 -0.064 0.424
responsibility frequency 1.571 4.167 0.001 0.073 0.146 0.126
anxiety goals 0.949 3.719 0.318 0.003 0.018 0.885
anxiety frequency 0.897 3.662 0.383 0.006 0.020 0.892
depression goals 1.528 6.872 0.010 0.005 0.031 0.704
depression frequency 1.579 6.987 0.006 0.033 0.113 0.206
volatility goals 0.358 1.130 0.080 -0.021 -0.088 0.349
volatility frequency 0.353 1.170 0.074 -0.075 -0.188 0.101
curiosity goals 1.265 6.356 0.003 -0.018 -0.122 0.276
curiosity frequency 1.217 6.071 0.006 0.033 0.126 0.326
aesthetic goals 0.619 24.722 0.045 0.000 -0.025 0.737
aesthetic frequency 0.703 28.623 0.029 0.006 0.177 0.062
imagination goals 0.098 0.478 0.880 0.013 0.091 0.400
imagination frequency 0.184 0.874 0.787 0.011 0.038 0.795

Several moderator effects that are significantly different from zero:

  • The frequency of self-acceptance behaviors moderates changes in ideal-level assertiveness.
  • The effect for agreeableness (frequency of self-acceptance behaviors) is only represented within the respectfulness facet.
  • The effect for conscientiousness (frequency of self-acceptance behaviors) is represented within the organization and productiveness facets.

Prepare data frame for plotting:

Show the code
df_table_hyp7_plot <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp7_plot <- df_table_hyp7_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("ideal", levels = c("ideal"), labels = c("ideal"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • ideal = ideal-level personality
  • goals = specific, facet-level acceptance goal(s) as moderator
  • frequency = frequency of self-acceptance behavior as moderator
Show the code
ggplot(df_table_hyp7_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")


7 Exploratory results

7.1 Differences in change across experimental groups (a)

We will explore a) whether change in psychological well-being indicators as well as the difference between real- and ideal- self will differ across groups at follow-up.

7.1.1 Well-being change: differences across groups

7.1.1.1 Life satisfaction

Life satisfaction: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_swls_group_config <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2a", "lamb2b")*sw06_02_t1 + c("lamb3a", "lamb3b")*sw06_03_t1 + c("lamb4a", "lamb4b")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2a", "lamb2b")*sw06_02_t2 + c("lamb3a", "lamb3b")*sw06_03_t2 + c("lamb4a", "lamb4b")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'
lcs_swls_group_config <- sem(mi_lcs_swls_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                             fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_swls_group_weak <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_weak <- sem(mi_lcs_swls_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_swls_group_strong <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_strong <- sem(mi_lcs_swls_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Life satisfaction: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_swls_group_config, lcs_swls_group_weak, lcs_swls_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                      Df   AIC   BIC   Chisq Chisq diff Df diff Pr(>Chisq)  
lcs_swls_group_config 50 14267 14441  93.624                                
lcs_swls_group_weak   53 14269 14429 101.697     9.1169       3    0.02778 *
lcs_swls_group_strong 58 14264 14401 106.064     4.4012       5    0.49321  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_swls_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_swls_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_swls_1 ~1 d_int_a 0.853 1.297 6.040 0
d_swls_1 ~1 d_int_b 0.669 1.004 4.835 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_swls_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_swls_1 ~1 d_int 0.767 1.186 7.817 0
d_swls_1 ~1 d_int 0.767 1.133 7.817 0

Slightly more positive change in life satisfaction in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_swls_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 60 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        58
  Number of equality constraints                    23

  Number of observations per group:               Used       Total
    Self-Acceptance                                347         347
    Self-Improvement                               367         368
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Self-Improvement                                 3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               101.696      93.809
  Degrees of freedom                                53          53
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.084
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             54.733      50.488
    Self-Improvement                            46.963      43.321

Model Test Baseline Model:

  Test statistic                              3141.266    2318.950
  Degrees of freedom                                56          56
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.355

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.984       0.982
  Tucker-Lewis Index (TLI)                       0.983       0.981
                                                                  
  Robust Comparative Fit Index (CFI)                         0.986
  Robust Tucker-Lewis Index (TLI)                            0.985

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -7099.624   -7099.624
  Scaling correction factor                                  0.721
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -7048.776   -7048.776
  Scaling correction factor                                  1.128
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               14269.248   14269.248
  Bayesian (BIC)                             14429.229   14429.229
  Sample-size adjusted Bayesian (SABIC)      14318.095   14318.095

Root Mean Square Error of Approximation:

  RMSEA                                          0.051       0.046
  90 Percent confidence interval - lower         0.036       0.031
  90 Percent confidence interval - upper         0.066       0.061
  P-value H_0: RMSEA <= 0.050                    0.448       0.637
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.049
  90 Percent confidence interval - lower                     0.032
  90 Percent confidence interval - upper                     0.066
  P-value H_0: Robust RMSEA <= 0.050                         0.500
  P-value H_0: Robust RMSEA >= 0.080                         0.001

Standardized Root Mean Square Residual:

  SRMR                                           0.045       0.045

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.968    0.811
    s06_02_ (lmb2)    0.832    0.031   27.204    0.000    0.805    0.727
    s06_03_ (lmb3)    1.038    0.033   31.249    0.000    1.004    0.833
    s06_04_ (lmb4)    0.857    0.034   25.098    0.000    0.829    0.697
  swls_t2 =~                                                            
    s06_01_           1.000                               0.995    0.819
    s06_02_ (lmb2)    0.832    0.031   27.204    0.000    0.828    0.737
    s06_03_ (lmb3)    1.038    0.033   31.249    0.000    1.033    0.840
    s06_04_ (lmb4)    0.857    0.034   25.098    0.000    0.853    0.707
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.661    0.661

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               0.972    0.972
  d_swls_1 ~                                                            
    swls_t1 (fb_a)   -0.202    0.046   -4.426    0.000   -0.297   -0.297

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cov1)    0.106    0.055    1.924    0.054    0.106    0.218
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cov2)    0.216    0.047    4.585    0.000    0.216    0.375
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cov3)    0.128    0.042    3.070    0.002    0.128    0.288
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cov4)    0.272    0.051    5.316    0.000    0.272    0.375

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
   .d_swl_1 (d_n_)    0.853    0.141    6.040    0.000    1.297    1.297
    swls_t1 (wb__)    2.682    0.060   44.414    0.000    2.771    2.771
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.578    0.098    5.881    0.000    0.578    0.523
   .s06_03_  (m3a)   -0.038    0.109   -0.354    0.724   -0.038   -0.032
   .s06_04_  (m4a)    0.418    0.109    3.837    0.000    0.418    0.352
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.578    0.098    5.881    0.000    0.578    0.515
   .s06_03_  (m3a)   -0.038    0.109   -0.354    0.724   -0.038   -0.031
   .s06_04_  (m4a)    0.418    0.109    3.837    0.000    0.418    0.347

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
   .d_swl_1 (d_v_)    0.394    0.058    6.781    0.000    0.912    0.912
    swls_t1 (wb__)    0.937    0.066   14.167    0.000    1.000    1.000
   .s06_01_ (res1)    0.486    0.060    8.077    0.000    0.486    0.342
   .s06_02_ (res2)    0.577    0.045   12.796    0.000    0.577    0.471
   .s06_03_ (res3)    0.444    0.048    9.269    0.000    0.444    0.305
   .s06_04_ (res4)    0.727    0.051   14.283    0.000    0.727    0.514
   .s06_01_ (res1)    0.486    0.060    8.077    0.000    0.486    0.329
   .s06_02_ (res2)    0.577    0.045   12.796    0.000    0.577    0.457
   .s06_03_ (res3)    0.444    0.048    9.269    0.000    0.444    0.294
   .s06_04_ (res4)    0.727    0.051   14.283    0.000    0.727    0.500


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.917    0.820
    s06_02_ (lmb2)    0.832    0.031   27.204    0.000    0.763    0.690
    s06_03_ (lmb3)    1.038    0.033   31.249    0.000    0.952    0.828
    s06_04_ (lmb4)    0.857    0.034   25.098    0.000    0.786    0.657
  swls_t2 =~                                                            
    s06_01_           1.000                               1.019    0.847
    s06_02_ (lmb2)    0.832    0.031   27.204    0.000    0.848    0.727
    s06_03_ (lmb3)    1.038    0.033   31.249    0.000    1.058    0.854
    s06_04_ (lmb4)    0.857    0.034   25.098    0.000    0.874    0.695
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.654    0.654

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               0.900    0.900
  d_swls_1 ~                                                            
    swls_t1 (fb_b)   -0.146    0.045   -3.261    0.001   -0.202   -0.202

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cv1b)    0.059    0.043    1.374    0.169    0.059    0.145
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cv2b)    0.367    0.049    7.436    0.000    0.367    0.573
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cv3b)    0.050    0.040    1.252    0.211    0.050    0.120
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cv4b)    0.320    0.064    4.979    0.000    0.320    0.392

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
   .d_swl_1 (d_n_)    0.669    0.138    4.835    0.000    1.004    1.004
    swls_t1 (wb__)    2.705    0.058   46.977    0.000    2.949    2.949
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.570    0.102    5.612    0.000    0.570    0.515
   .s06_03_  (m3b)   -0.006    0.105   -0.056    0.956   -0.006   -0.005
   .s06_04_  (m4b)    0.526    0.109    4.801    0.000    0.526    0.439
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.570    0.102    5.612    0.000    0.570    0.489
   .s06_03_  (m3b)   -0.006    0.105   -0.056    0.956   -0.006   -0.005
   .s06_04_  (m4b)    0.526    0.109    4.801    0.000    0.526    0.418

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
   .d_swl_1 (d_v_)    0.426    0.053    7.987    0.000    0.959    0.959
    swls_t1 (wb__)    0.841    0.070   11.982    0.000    1.000    1.000
   .s06_01_ (rs1b)    0.409    0.045    9.101    0.000    0.409    0.327
   .s06_02_ (rs2b)    0.641    0.050   12.911    0.000    0.641    0.524
   .s06_03_ (rs3b)    0.416    0.039   10.526    0.000    0.416    0.314
   .s06_04_ (rs4b)    0.816    0.062   13.191    0.000    0.816    0.569
   .s06_01_ (rs1b)    0.409    0.045    9.101    0.000    0.409    0.283
   .s06_02_ (rs2b)    0.641    0.050   12.911    0.000    0.641    0.471
   .s06_03_ (rs3b)    0.416    0.039   10.526    0.000    0.416    0.271
   .s06_04_ (rs4b)    0.816    0.062   13.191    0.000    0.816    0.517
7.1.1.2 Meaning in life

Meaning in life: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_meaning_group_config <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2a", "lamb2b")*meaning_par2_t1 + c("lamb3a", "lamb3b")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2a", "lamb2b")*meaning_par2_t2 + c("lamb3a", "lamb3b")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_meaning_group_config <- sem(mi_lcs_meaning_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_meaning_group_weak <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_weak <- sem(mi_lcs_meaning_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_meaning_group_strong <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_strong <- sem(mi_lcs_meaning_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_meaning_group_config, lcs_meaning_group_weak, lcs_meaning_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df   AIC   BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_meaning_group_config 24 10472 10609 38.067                              
lcs_meaning_group_weak   26 10470 10598 40.184     1.9319       2     0.3806
lcs_meaning_group_strong 30 10466 10575 44.216     3.7939       4     0.4346
# show model with varying latent change parameters 
# -> key parameter is "d_meaning_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_meaning_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_meaning_1 ~1 d_int_a 1.289 1.595 6.828 0
d_meaning_1 ~1 d_int_b 1.479 1.792 7.535 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_meaning_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_meaning_1 ~1 d_int 1.384 1.682 10.052 0
d_meaning_1 ~1 d_int 1.384 1.701 10.052 0

Slightly more positive change in meaning in life in the Self-Improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_meaning_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 68 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                347         347
    Self-Improvement                               367         368
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Self-Improvement                                 3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                40.184      37.276
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.037       0.071
  Scaling correction factor                                  1.078
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             19.692      18.267
    Self-Improvement                            20.492      19.009

Model Test Baseline Model:

  Test statistic                              2964.407    2380.993
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.245

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.995       0.995
  Tucker-Lewis Index (TLI)                       0.994       0.994
                                                                  
  Robust Comparative Fit Index (CFI)                         0.996
  Robust Tucker-Lewis Index (TLI)                            0.995

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -5206.794   -5206.794
  Scaling correction factor                                  0.734
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -5186.702   -5186.702
  Scaling correction factor                                  1.117
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               10469.587   10469.587
  Bayesian (BIC)                             10597.572   10597.572
  Sample-size adjusted Bayesian (SABIC)      10508.665   10508.665

Root Mean Square Error of Approximation:

  RMSEA                                          0.039       0.035
  90 Percent confidence interval - lower         0.010       0.000
  90 Percent confidence interval - upper         0.062       0.058
  P-value H_0: RMSEA <= 0.050                    0.764       0.851
  P-value H_0: RMSEA >= 0.080                    0.001       0.000
                                                                  
  Robust RMSEA                                               0.038
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.063
  P-value H_0: Robust RMSEA <= 0.050                         0.761
  P-value H_0: Robust RMSEA >= 0.080                         0.002

Standardized Root Mean Square Residual:

  SRMR                                           0.032       0.032

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               0.949    0.793
    mnn_2_1 (lmb2)    1.257    0.039   31.903    0.000    1.193    0.928
    mnn_3_1 (lmb3)    1.117    0.035   31.759    0.000    1.060    0.854
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.994    0.806
    mnn_2_2 (lmb2)    1.257    0.039   31.903    0.000    1.249    0.933
    mnn_3_2 (lmb3)    1.117    0.035   31.759    0.000    1.110    0.864
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.813    0.813

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    mnng_t1           1.000                               0.955    0.955
  d_meaning_1 ~                                                         
    mnng_t1 (fb_a)   -0.314    0.057   -5.539    0.000   -0.369   -0.369

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cov1)      0.292    0.042    7.008    0.000    0.292    0.548
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cov2)     -0.083    0.034   -2.417    0.016   -0.083   -0.361
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cov3)      0.152    0.032    4.703    0.000    0.152    0.364

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
   .d_mnn_1 (d_n_)    1.289    0.189    6.828    0.000    1.595    1.595
    mnng_t1 (wb__)    3.290    0.061   53.595    0.000    3.466    3.466
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2a)   -0.260    0.143   -1.812    0.070   -0.260   -0.202
   .mnn_3_1  (m3a)   -0.046    0.129   -0.353    0.724   -0.046   -0.037
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2a)   -0.260    0.143   -1.812    0.070   -0.260   -0.194
   .mnn_3_2  (m3a)   -0.046    0.129   -0.353    0.724   -0.046   -0.035

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
   .d_mnn_1 (d_v_)    0.564    0.073    7.756    0.000    0.864    0.864
    mnng_t1 (wb__)    0.901    0.083   10.800    0.000    1.000    1.000
   .mnn_1_1 (res1)    0.533    0.043   12.485    0.000    0.533    0.372
   .mnn_2_1 (res2)    0.230    0.035    6.535    0.000    0.230    0.139
   .mnn_3_1 (res3)    0.419    0.039   10.793    0.000    0.419    0.271
   .mnn_1_2 (res1)    0.533    0.043   12.485    0.000    0.533    0.350
   .mnn_2_2 (res2)    0.230    0.035    6.535    0.000    0.230    0.129
   .mnn_3_2 (res3)    0.419    0.039   10.793    0.000    0.419    0.254


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               0.900    0.770
    mnn_2_1 (lmb2)    1.257    0.039   31.903    0.000    1.131    0.925
    mnn_3_1 (lmb3)    1.117    0.035   31.759    0.000    1.005    0.826
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.940    0.783
    mnn_2_2 (lmb2)    1.257    0.039   31.903    0.000    1.182    0.931
    mnn_3_2 (lmb3)    1.117    0.035   31.759    0.000    1.050    0.838
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.877    0.877

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    mnng_t1           1.000                               0.957    0.957
  d_meaning_1 ~                                                         
    mnng_t1 (fb_b)   -0.374    0.056   -6.719    0.000   -0.408   -0.408

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cv1b)      0.342    0.048    7.152    0.000    0.342    0.615
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cv2b)     -0.036    0.035   -1.037    0.300   -0.036   -0.168
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cv3b)      0.201    0.039    5.129    0.000    0.201    0.429

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
   .d_mnn_1 (d_n_)    1.479    0.196    7.535    0.000    1.792    1.792
    mnng_t1 (wb__)    3.146    0.059   53.754    0.000    3.495    3.495
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2b)   -0.161    0.138   -1.170    0.242   -0.161   -0.132
   .mnn_3_1  (m3b)    0.028    0.119    0.234    0.815    0.028    0.023
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2b)   -0.161    0.138   -1.170    0.242   -0.161   -0.127
   .mnn_3_2  (m3b)    0.028    0.119    0.234    0.815    0.028    0.022

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
   .d_mnn_1 (d_v_)    0.567    0.077    7.373    0.000    0.833    0.833
    mnng_t1 (wb__)    0.810    0.081   10.015    0.000    1.000    1.000
   .mnn_1_1 (rs1b)    0.556    0.048   11.598    0.000    0.556    0.407
   .mnn_2_1 (rs2b)    0.214    0.040    5.378    0.000    0.214    0.144
   .mnn_3_1 (rs3b)    0.470    0.044   10.739    0.000    0.470    0.317
   .mnn_1_2 (rs1b)    0.556    0.048   11.598    0.000    0.556    0.386
   .mnn_2_2 (rs2b)    0.214    0.040    5.378    0.000    0.214    0.133
   .mnn_3_2 (rs3b)    0.470    0.044   10.739    0.000    0.470    0.299
7.1.1.3 Self-esteem

Self-esteem: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_selfes_group_config <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2a", "lamb2b")*selfes_par2_t1 + c("lamb3a", "lamb3b")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2a", "lamb2b")*selfes_par2_t2 + c("lamb3a", "lamb3b")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_selfes_group_config <- sem(mi_lcs_selfes_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_selfes_group_weak <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_weak <- sem(mi_lcs_selfes_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_selfes_group_strong <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_strong <- sem(mi_lcs_selfes_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_selfes_group_config, lcs_selfes_group_weak, lcs_selfes_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                        Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_selfes_group_config 24 7347.4 7484.5 20.707                              
lcs_selfes_group_weak   26 7345.5 7473.4 22.790     2.0845       2     0.3527
lcs_selfes_group_strong 30 7344.2 7453.9 29.500     6.4175       4     0.1701
# show model with varying latent change parameters 
# -> key parameter is "d_selfes_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_selfes_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_selfes_1 ~1 d_int_a 1.178 2.061 7.605 0
d_selfes_1 ~1 d_int_b 0.965 1.846 6.713 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_selfes_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_selfes_1 ~1 d_int 1.077 1.916 10.19 0
d_selfes_1 ~1 d_int 1.077 2.020 10.19 0

Slightly more positive change in self-esteem in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_selfes_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 75 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                347         347
    Self-Improvement                               367         368
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Self-Improvement                                 3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                22.790      21.782
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.645       0.701
  Scaling correction factor                                  1.046
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                              8.879       8.486
    Self-Improvement                            13.911      13.296

Model Test Baseline Model:

  Test statistic                              3753.491    3014.202
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.245

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.001       1.002
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.002

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3644.731   -3644.731
  Scaling correction factor                                  0.685
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3633.336   -3633.336
  Scaling correction factor                                  1.062
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                7345.462    7345.462
  Bayesian (BIC)                              7473.447    7473.447
  Sample-size adjusted Bayesian (SABIC)       7384.540    7384.540

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.035       0.032
  P-value H_0: RMSEA <= 0.050                    0.996       0.998
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.034
  P-value H_0: Robust RMSEA <= 0.050                         0.995
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.017       0.017

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.792    0.880
    slf_2_1 (lmb2)    1.148    0.026   44.540    0.000    0.909    0.917
    slf_3_1 (lmb3)    1.160    0.027   42.206    0.000    0.919    0.918
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.776    0.876
    slf_2_2 (lmb2)    1.148    0.026   44.540    0.000    0.891    0.914
    slf_3_2 (lmb3)    1.160    0.027   42.206    0.000    0.901    0.915
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.737    0.737

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    slfs_t1           1.000                               1.020    1.020
  d_selfes_1 ~                                                          
    slfs_t1 (fb_a)   -0.280    0.044   -6.340    0.000   -0.388   -0.388

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cov1)     0.076    0.014    5.571    0.000    0.076    0.414
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cov2)     0.059    0.014    4.105    0.000    0.059    0.375
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cov3)     0.036    0.015    2.456    0.014    0.036    0.229

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
   .d_slf_1 (d_n_)    1.178    0.155    7.605    0.000    2.061    2.061
    slfs_t1 (wb__)    3.129    0.048   65.182    0.000    3.953    3.953
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2a)   -0.475    0.088   -5.411    0.000   -0.475   -0.479
   .slf_3_1  (m3a)   -0.449    0.090   -4.997    0.000   -0.449   -0.449
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2a)   -0.475    0.088   -5.411    0.000   -0.475   -0.487
   .slf_3_2  (m3a)   -0.449    0.090   -4.997    0.000   -0.449   -0.456

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
   .d_slf_1 (d_v_)    0.278    0.033    8.512    0.000    0.849    0.849
    slfs_t1 (wb__)    0.627    0.046   13.582    0.000    1.000    1.000
   .slf_1_1 (res1)    0.182    0.015   12.431    0.000    0.182    0.226
   .slf_2_1 (res2)    0.157    0.018    8.958    0.000    0.157    0.160
   .slf_3_1 (res3)    0.157    0.016    9.664    0.000    0.157    0.157
   .slf_1_2 (res1)    0.182    0.015   12.431    0.000    0.182    0.232
   .slf_2_2 (res2)    0.157    0.018    8.958    0.000    0.157    0.165
   .slf_3_2 (res3)    0.157    0.016    9.664    0.000    0.157    0.162


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.721    0.852
    slf_2_1 (lmb2)    1.148    0.026   44.540    0.000    0.827    0.913
    slf_3_1 (lmb3)    1.160    0.027   42.206    0.000    0.836    0.887
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.749    0.861
    slf_2_2 (lmb2)    1.148    0.026   44.540    0.000    0.860    0.919
    slf_3_2 (lmb3)    1.160    0.027   42.206    0.000    0.870    0.894
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.698    0.698

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    slfs_t1           1.000                               0.962    0.962
  d_selfes_1 ~                                                          
    slfs_t1 (fb_b)   -0.223    0.042   -5.266    0.000   -0.307   -0.307

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cv1b)     0.082    0.016    5.204    0.000    0.082    0.416
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cv2b)     0.013    0.013    0.983    0.325    0.013    0.096
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cv3b)     0.051    0.018    2.819    0.005    0.051    0.271

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
   .d_slf_1 (d_n_)    0.965    0.144    6.713    0.000    1.846    1.846
    slfs_t1 (wb__)    3.126    0.043   72.987    0.000    4.336    4.336
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2b)   -0.412    0.087   -4.732    0.000   -0.412   -0.455
   .slf_3_1  (m3b)   -0.462    0.094   -4.892    0.000   -0.462   -0.489
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2b)   -0.412    0.087   -4.732    0.000   -0.412   -0.440
   .slf_3_2  (m3b)   -0.462    0.094   -4.892    0.000   -0.462   -0.474

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
   .d_slf_1 (d_v_)    0.248    0.029    8.457    0.000    0.906    0.906
    slfs_t1 (wb__)    0.520    0.039   13.388    0.000    1.000    1.000
   .slf_1_1 (rs1b)    0.196    0.017   11.861    0.000    0.196    0.274
   .slf_2_1 (rs2b)    0.137    0.014    9.610    0.000    0.137    0.166
   .slf_3_1 (rs3b)    0.190    0.018   10.780    0.000    0.190    0.214
   .slf_1_2 (rs1b)    0.196    0.017   11.861    0.000    0.196    0.259
   .slf_2_2 (rs2b)    0.137    0.014    9.610    0.000    0.137    0.156
   .slf_3_2 (rs3b)    0.190    0.018   10.780    0.000    0.190    0.201
7.1.1.4 Self-concept clarity

Self-concept clarity: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_concept_group_config <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2a", "lamb2b")*concept_par2_t1 + c("lamb3a", "lamb3b")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2a", "lamb2b")*concept_par2_t2 + c("lamb3a", "lamb3b")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_concept_group_config <- sem(mi_lcs_concept_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_concept_group_weak <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_weak <- sem(mi_lcs_concept_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_concept_group_strong <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_strong <- sem(mi_lcs_concept_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_concept_group_config, lcs_concept_group_weak, lcs_concept_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_concept_group_config 24 8376.4 8513.5 32.823                              
lcs_concept_group_weak   26 8373.0 8500.9 33.355    0.46999       2     0.7906
lcs_concept_group_strong 30 8365.7 8475.4 34.073    0.72313       4     0.9484
# show model with varying latent change parameters 
# -> key parameter is "d_concept_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_concept_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_concept_1 ~1 d_int_a 1.234 2.125 7.949 0
d_concept_1 ~1 d_int_b 1.077 1.986 7.104 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_concept_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_concept_1 ~1 d_int 1.159 2.024 10.612 0
d_concept_1 ~1 d_int 1.159 2.108 10.612 0

Slightly more positive change in self-concept clarity in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_concept_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 64 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                347         347
    Self-Improvement                               367         368
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Self-Improvement                                 3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                33.355      32.673
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.152       0.172
  Scaling correction factor                                  1.021
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             24.853      24.344
    Self-Improvement                             8.503       8.329

Model Test Baseline Model:

  Test statistic                              2699.514    2215.007
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.219

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.997       0.997
  Tucker-Lewis Index (TLI)                       0.997       0.996
                                                                  
  Robust Comparative Fit Index (CFI)                         0.997
  Robust Tucker-Lewis Index (TLI)                            0.997

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4158.476   -4158.476
  Scaling correction factor                                  0.691
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4141.799   -4141.799
  Scaling correction factor                                  1.054
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                8372.952    8372.952
  Bayesian (BIC)                              8500.937    8500.937
  Sample-size adjusted Bayesian (SABIC)       8412.030    8412.030

Root Mean Square Error of Approximation:

  RMSEA                                          0.028       0.027
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.053       0.052
  P-value H_0: RMSEA <= 0.050                    0.918       0.931
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.028
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.055
  P-value H_0: Robust RMSEA <= 0.050                         0.904
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.026       0.026

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.679    0.813
    cnc_2_1 (lmb2)    1.241    0.043   28.864    0.000    0.843    0.857
    cnc_3_1 (lmb3)    1.316    0.040   32.583    0.000    0.894    0.879
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.682    0.814
    cnc_2_2 (lmb2)    1.241    0.043   28.864    0.000    0.847    0.858
    cnc_3_2 (lmb3)    1.316    0.040   32.583    0.000    0.898    0.880
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.851    0.851

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    cncpt_1           1.000                               0.995    0.995
  d_concept_1 ~                                                         
    cncpt_1 (fb_a)   -0.361    0.051   -7.073    0.000   -0.422   -0.422

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cov1)      0.032    0.019    1.656    0.098    0.032    0.135
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cov2)      0.086    0.024    3.565    0.000    0.086    0.335
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cov3)      0.084    0.025    3.399    0.001    0.084    0.357

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
   .d_cnc_1 (d_n_)    1.234    0.155    7.949    0.000    2.125    2.125
    cncpt_1 (wb__)    2.919    0.043   68.408    0.000    4.297    4.297
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2a)   -0.493    0.136   -3.629    0.000   -0.493   -0.501
   .cnc_3_1  (m3a)   -1.037    0.126   -8.237    0.000   -1.037   -1.020
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2a)   -0.493    0.136   -3.629    0.000   -0.493   -0.499
   .cnc_3_2  (m3a)   -1.037    0.126   -8.237    0.000   -1.037   -1.016

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
   .d_cnc_1 (d_v_)    0.277    0.033    8.311    0.000    0.822    0.822
    cncpt_1 (wb__)    0.461    0.038   12.099    0.000    1.000    1.000
   .cnc_1_1 (res1)    0.237    0.019   12.605    0.000    0.237    0.339
   .cnc_2_1 (res2)    0.258    0.025   10.267    0.000    0.258    0.266
   .cnc_3_1 (res3)    0.235    0.025    9.570    0.000    0.235    0.227
   .cnc_1_2 (res1)    0.237    0.019   12.605    0.000    0.237    0.337
   .cnc_2_2 (res2)    0.258    0.025   10.267    0.000    0.258    0.264
   .cnc_3_2 (res3)    0.235    0.025    9.570    0.000    0.235    0.226


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.627    0.785
    cnc_2_1 (lmb2)    1.241    0.043   28.864    0.000    0.778    0.844
    cnc_3_1 (lmb3)    1.316    0.040   32.583    0.000    0.825    0.868
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.677    0.808
    cnc_2_2 (lmb2)    1.241    0.043   28.864    0.000    0.841    0.862
    cnc_3_2 (lmb3)    1.316    0.040   32.583    0.000    0.891    0.884
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.801    0.801

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    cncpt_1           1.000                               0.926    0.926
  d_concept_1 ~                                                         
    cncpt_1 (fb_b)   -0.290    0.049   -5.944    0.000   -0.336   -0.336

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cv1b)      0.098    0.019    5.048    0.000    0.098    0.399
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cv2b)      0.056    0.024    2.330    0.020    0.056    0.228
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cv3b)      0.059    0.024    2.460    0.014    0.059    0.266

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
   .d_cnc_1 (d_n_)    1.077    0.152    7.104    0.000    1.986    1.986
    cncpt_1 (wb__)    2.936    0.041   72.093    0.000    4.683    4.683
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2b)   -0.511    0.134   -3.804    0.000   -0.511   -0.555
   .cnc_3_1  (m3b)   -1.044    0.127   -8.222    0.000   -1.044   -1.099
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2b)   -0.511    0.134   -3.804    0.000   -0.511   -0.524
   .cnc_3_2  (m3b)   -1.044    0.127   -8.222    0.000   -1.044   -1.036

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
   .d_cnc_1 (d_v_)    0.261    0.030    8.560    0.000    0.887    0.887
    cncpt_1 (wb__)    0.393    0.036   11.046    0.000    1.000    1.000
   .cnc_1_1 (rs1b)    0.245    0.018   13.471    0.000    0.245    0.384
   .cnc_2_1 (rs2b)    0.244    0.023   10.659    0.000    0.244    0.287
   .cnc_3_1 (rs3b)    0.222    0.024    9.208    0.000    0.222    0.246
   .cnc_1_2 (rs1b)    0.245    0.018   13.471    0.000    0.245    0.348
   .cnc_2_2 (rs2b)    0.244    0.023   10.659    0.000    0.244    0.257
   .cnc_3_2 (rs3b)    0.222    0.024    9.208    0.000    0.222    0.219

7.1.2 Current- and ideal-self personality differences across groups

Profile correlations by group and measurement occasion (mixed effects models) - results:

df_sbsa <- df_sbsa %>% mutate(time_d = time - 1)

psych::describeBy(df_sbsa$profile_corr_item_z, list(df_sbsa$rando, df_sbsa$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 342 0.36 0.48   0.36    0.35 0.47 -1.05 2.25   3.3 0.39     0.99 0.03
------------------------------------------------------------ 
: Self-Improvement
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 362 0.38 0.45   0.36    0.35 0.44 -0.71 2.01  2.72 0.59     0.68 0.02
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 326 0.55 0.58   0.49    0.51 0.52 -0.9 3.32  4.22    1     3.31 0.03
------------------------------------------------------------ 
: Self-Improvement
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 338 0.56 0.48   0.53    0.55 0.48 -0.77 2.27  3.04 0.19     0.25 0.03
psych::describeBy(df_sbsa$profile_corr_facet_z, list(df_sbsa$rando, df_sbsa$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 342 0.27 0.67   0.21    0.25 0.64 -1.5 2.67  4.17 0.46     0.68 0.04
------------------------------------------------------------ 
: Self-Improvement
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 362 0.29 0.63   0.23    0.25 0.65 -1.06 2.44   3.5 0.56     0.27 0.03
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 326 0.49 0.76   0.45    0.46 0.72 -1.17 3.73   4.9 0.69      1.5 0.04
------------------------------------------------------------ 
: Self-Improvement
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 338 0.52 0.69    0.5     0.5 0.74 -1.22 2.54  3.77 0.17    -0.31 0.04
lm_profile_corr_item <- lmerTest::lmer(profile_corr_item_z ~ time_d * rando + (1 | pid), data = df_sbsa)
lm_profile_corr_facet <- lmerTest::lmer(profile_corr_facet_z ~ time_d * rando + (1 | pid), data = df_sbsa)

kable(bind_rows(as.data.frame(summary(lm_profile_corr_item)$coefficients), as.data.frame(summary(lm_profile_corr_facet)$coefficients)) %>% as_tibble() %>% mutate(outcome = c(rep("Item-level profile corr.", 4), rep("Facet-level profile corr.", 4)), term = c(rep(c("Intercept", "time", "group", "time*group"), 2))) %>% select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`), digits = 3)
outcome term Estimate Std. Error df t value p
Item-level profile corr. Intercept 0.361 0.027 967.869 13.410 0.000
Item-level profile corr. time 0.187 0.022 667.741 8.347 0.000
Item-level profile corr. group 0.016 0.038 968.479 0.425 0.671
Item-level profile corr. time*group -0.011 0.031 670.006 -0.360 0.719
Facet-level profile corr. Intercept 0.269 0.037 951.267 7.252 0.000
Facet-level profile corr. time 0.229 0.030 667.445 7.648 0.000
Facet-level profile corr. group 0.020 0.052 951.861 0.385 0.700
Facet-level profile corr. time*group -0.003 0.042 669.591 -0.080 0.937

Squared trait-/facet-differences by group and measurement occasion (mixed effects models) - results:

mod_traits_sqdiff_groups <- df_sbsa %>% 
  select(pid, time_d, rando, ends_with("_sqdiff")) %>% 
  pivot_longer(ends_with("_sqdiff"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_sqdiff_groups_unlist <- as.data.frame(summary(mod_traits_sqdiff_groups[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(mod_traits_sqdiff_groups)) {
  mod_traits_sqdiff_groups_unlist <- bind_rows(mod_traits_sqdiff_groups_unlist, 
                                               as.data.frame(summary(mod_traits_sqdiff_groups[[i]])$coefficients) %>% as_tibble())
}

kable(mod_traits_sqdiff_groups_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))),  # order by BFI traits, 
      digits = 3)
outcome term Estimate Std. Error df t value p
extraversion Intercept 1.878 0.103 959.798 18.152 0.000
extraversion time -0.555 0.093 651.000 -5.975 0.000
extraversion group -0.064 0.145 959.798 -0.438 0.661
extraversion time*group 0.100 0.130 651.000 0.769 0.442
agreeableness Intercept 0.589 0.047 972.211 12.538 0.000
agreeableness time -0.150 0.043 651.000 -3.497 0.001
agreeableness group -0.063 0.066 972.211 -0.963 0.336
agreeableness time*group -0.021 0.060 651.000 -0.351 0.726
conscientiousness Intercept 1.873 0.108 919.365 17.281 0.000
conscientiousness time -0.387 0.091 651.000 -4.235 0.000
conscientiousness group -0.348 0.152 919.365 -2.287 0.022
conscientiousness time*group 0.126 0.128 651.000 0.987 0.324
neuroticism Intercept 3.407 0.183 854.426 18.585 0.000
neuroticism time -0.699 0.136 651.000 -5.131 0.000
neuroticism group -0.099 0.257 854.426 -0.384 0.701
neuroticism time*group 0.053 0.191 651.000 0.276 0.782
openness Intercept 0.490 0.039 1057.826 12.631 0.000
openness time -0.129 0.040 651.000 -3.258 0.001
openness group -0.023 0.054 1057.826 -0.423 0.673
openness time*group 0.021 0.055 651.000 0.374 0.708
sociability Intercept 2.992 0.166 929.743 18.009 0.000
sociability time -0.911 0.142 651.000 -6.398 0.000
sociability group -0.137 0.233 929.743 -0.589 0.556
sociability time*group 0.190 0.200 651.000 0.953 0.341
assertiveness Intercept 1.891 0.121 1060.149 15.604 0.000
assertiveness time -0.559 0.124 651.000 -4.517 0.000
assertiveness group -0.151 0.170 1060.149 -0.890 0.373
assertiveness time*group 0.135 0.174 651.000 0.779 0.436
energy Intercept 2.082 0.133 1045.145 15.642 0.000
energy time -0.502 0.134 651.000 -3.754 0.000
energy group -0.015 0.187 1045.145 -0.079 0.937
energy time*group 0.022 0.187 651.000 0.119 0.906
compassion Intercept 0.621 0.050 1119.816 12.439 0.000
compassion time -0.193 0.055 651.000 -3.543 0.000
compassion group -0.143 0.070 1119.816 -2.038 0.042
compassion time*group 0.084 0.076 651.000 1.101 0.271
respectfulness Intercept 0.666 0.060 1045.022 11.178 0.000
respectfulness time -0.145 0.060 651.000 -2.420 0.016
respectfulness group 0.008 0.084 1045.022 0.099 0.921
respectfulness time*group -0.039 0.084 651.000 -0.468 0.640
trust Intercept 1.250 0.096 1067.043 13.008 0.000
trust time -0.276 0.099 651.000 -2.784 0.006
trust group 0.012 0.135 1067.043 0.092 0.927
trust time*group -0.153 0.139 651.000 -1.102 0.271
organization Intercept 2.182 0.141 989.115 15.507 0.000
organization time -0.478 0.132 651.000 -3.633 0.000
organization group -0.489 0.197 989.115 -2.480 0.013
organization time*group 0.204 0.185 651.000 1.107 0.269
productiveness Intercept 3.108 0.172 901.841 18.114 0.000
productiveness time -0.543 0.140 651.000 -3.875 0.000
productiveness group -0.383 0.241 901.841 -1.593 0.112
productiveness time*group 0.028 0.197 651.000 0.141 0.888
responsibility Intercept 1.376 0.099 1011.321 13.859 0.000
responsibility time -0.300 0.096 651.000 -3.134 0.002
responsibility group -0.210 0.139 1011.321 -1.509 0.132
responsibility time*group 0.107 0.134 651.000 0.798 0.425
anxiety Intercept 4.092 0.227 947.361 17.991 0.000
anxiety time -0.667 0.200 651.000 -3.327 0.001
anxiety group -0.066 0.319 947.361 -0.208 0.835
anxiety time*group -0.063 0.281 651.000 -0.226 0.821
depression Intercept 4.202 0.219 890.115 19.154 0.000
depression time -0.986 0.175 651.000 -5.618 0.000
depression group -0.212 0.308 890.115 -0.689 0.491
depression time*group 0.166 0.246 651.000 0.674 0.501
volatility Intercept 2.957 0.192 902.039 15.412 0.000
volatility time -0.644 0.157 651.000 -4.104 0.000
volatility group -0.070 0.269 902.039 -0.262 0.793
volatility time*group 0.052 0.220 651.000 0.235 0.814
curiosity Intercept 0.534 0.053 1232.150 10.166 0.000
curiosity time -0.131 0.065 651.000 -2.024 0.043
curiosity group 0.025 0.074 1232.150 0.335 0.738
curiosity time*group -0.049 0.091 651.000 -0.535 0.593
aesthetic Intercept 0.501 0.051 1248.444 9.892 0.000
aesthetic time -0.167 0.064 651.000 -2.623 0.009
aesthetic group -0.066 0.071 1248.444 -0.935 0.350
aesthetic time*group 0.076 0.089 651.000 0.851 0.395
imagination Intercept 1.310 0.104 969.568 12.540 0.000
imagination time -0.319 0.095 651.000 -3.350 0.001
imagination group -0.103 0.147 969.568 -0.702 0.483
imagination time*group 0.158 0.133 651.000 1.184 0.237

With both conceptualizations of the similarity / difference of current- and ideal-level personality (profile correlations / squared differences), we find no significant effects of group (at T1; with few exceptions…) or of interaction effects of group by measurement occasion (at T2).

7.1.3 Latent change: differences in personality change

7.1.3.1 Run models

Adapt latent change score model from above (but without any moderation) and add grouping factor in estimation (adding vectorized equality constraints to the model step by step):

Show the code
# create templates:

# configural invariance
trait_template_main_config <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2a", "lamb2b")*ind02_t1 + c("lamb3a", "lamb3b")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2a", "lamb2b")*ind02_t2 + c("lamb3a", "lamb3b")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# weak invariance
trait_template_main_weak <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# strong invariance
trait_template_main_strong <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int", "d_int")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int", "b5_int")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

# strict invariance -> not really needed for this analysis

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_config_current <- lavaan(template_filled_config_current, 
                                          data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_current")), template_filled_config_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_current")), trait_main_fit_config_current))
  # configural - ideal
  template_filled_config_ideal <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_config_ideal <- lavaan(template_filled_config_ideal, 
                                        data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_ideal")), template_filled_config_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_ideal")), trait_main_fit_config_ideal))
  # weak - current
  template_filled_weak_current <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_weak_current <- lavaan(template_filled_weak_current, 
                                          data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_current")), template_filled_weak_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_current")), trait_main_fit_weak_current))
  # weak - ideal
  template_filled_weak_ideal <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_weak_ideal <- lavaan(template_filled_weak_ideal, 
                                        data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_ideal")), template_filled_weak_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_ideal")), trait_main_fit_weak_ideal))
  # strong - current
  template_filled_strong_current <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_strong_current <- lavaan(template_filled_strong_current, 
                                          data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_current")), template_filled_strong_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_current")), trait_main_fit_strong_current))
  # strong - ideal
  template_filled_strong_ideal <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_strong_ideal <- lavaan(template_filled_strong_ideal, 
                                        data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_ideal")), template_filled_strong_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_ideal")), trait_main_fit_strong_ideal))
}
7.1.3.2 Current self personality traits

Extraversion (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_current, fit_lcs_extra_main_weak_current, fit_lcs_extra_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_current 24 7453.0 7590.2 33.135                   
fit_lcs_extra_main_weak_current   26 7453.3 7581.3 37.440     3.9027       2
fit_lcs_extra_main_strong_current 30 7445.7 7555.5 37.847     0.3958       4
                                  Pr(>Chisq)
fit_lcs_extra_main_config_current           
fit_lcs_extra_main_weak_current       0.1421
fit_lcs_extra_main_strong_current     0.9828
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_extra_current <- broom::tidy(fit_lcs_extra_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a 0.682 1.941 5.712 0
d_extra_1 ~1 d_int_b 0.655 1.801 5.031 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.67 1.911 7.584 0
d_extra_1 ~1 d_int 0.67 1.834 7.584 0

Very similar change in extraversion in both groups. No significant differences according to the LRTs.

Agreeableness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_current, fit_lcs_agree_main_weak_current, fit_lcs_agree_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_current 24 6350.6 6487.7 46.417                   
fit_lcs_agree_main_weak_current   26 6346.9 6474.9 46.754    0.26941       2
fit_lcs_agree_main_strong_current 30 6341.8 6451.6 49.710    2.43589       4
                                  Pr(>Chisq)
fit_lcs_agree_main_config_current           
fit_lcs_agree_main_weak_current       0.8740
fit_lcs_agree_main_strong_current     0.6562
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_agree_current <- broom::tidy(fit_lcs_agree_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a 0.553 2.566 2.007 0.045
d_agree_1 ~1 d_int_b 0.705 3.333 4.770 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.639 2.883 4.245 0
d_agree_1 ~1 d_int 0.639 3.096 4.245 0

Similar change in agreeableness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Conscientiousness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_current, fit_lcs_consc_main_weak_current, fit_lcs_consc_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_current 24 6865.2 7002.4 43.058                   
fit_lcs_consc_main_weak_current   26 6865.4 6993.4 47.284     4.3031       2
fit_lcs_consc_main_strong_current 30 6858.7 6968.4 48.571     1.2081       4
                                  Pr(>Chisq)
fit_lcs_consc_main_config_current           
fit_lcs_consc_main_weak_current       0.1163
fit_lcs_consc_main_strong_current     0.8768
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_consc_current <- broom::tidy(fit_lcs_consc_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 0.575 1.594 4.068 0
d_consc_1 ~1 d_int_b 0.663 1.888 4.967 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.617 1.692 6.28 0
d_consc_1 ~1 d_int 0.617 1.778 6.28 0

Similar change in conscientiousness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

neuroticism (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_current, fit_lcs_neuro_main_weak_current, fit_lcs_neuro_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_current 24 7741.0 7878.2 30.316                   
fit_lcs_neuro_main_weak_current   26 7738.3 7866.3 31.583     1.3185       2
fit_lcs_neuro_main_strong_current 30 7732.6 7842.3 33.910     2.3157       4
                                  Pr(>Chisq)
fit_lcs_neuro_main_config_current           
fit_lcs_neuro_main_weak_current       0.5172
fit_lcs_neuro_main_strong_current     0.6779
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_neuro_current <- broom::tidy(fit_lcs_neuro_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a 0.391 0.863 2.628 0.009
d_neuro_1 ~1 d_int_b 0.548 1.135 4.128 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int 0.473 1.027 4.741 0
d_neuro_1 ~1 d_int 0.473 0.992 4.741 0

Similar change in neuroticism in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Openness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_current, fit_lcs_openn_main_weak_current, fit_lcs_openn_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_current 24 6939.0 7076.2 33.624                   
fit_lcs_openn_main_weak_current   26 6938.7 7066.8 37.379     3.1544       2
fit_lcs_openn_main_strong_current 30 6943.5 7053.2 50.107    12.8972       4
                                  Pr(>Chisq)  
fit_lcs_openn_main_config_current             
fit_lcs_openn_main_weak_current      0.20655  
fit_lcs_openn_main_strong_current    0.01179 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_openn_current <- broom::tidy(fit_lcs_openn_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = "*")
kable(params_main_lcs_openn_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.812 2.850 4.354 0.000 *
d_openn_1 ~1 d_int_b 0.060 0.287 0.418 0.676 *
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.44 1.67 3.719 0
d_openn_1 ~1 d_int 0.44 1.87 3.719 0

Almost no change in current-self openness in the self-improvement group but significant increase in self-acceptance group. Significant between-group difference in means according to the LRT (at p < .05).

7.1.3.3 Ideal self personality traits

Extraversion (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_ideal, fit_lcs_extra_main_weak_ideal, fit_lcs_extra_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_ideal 24 6564.7 6701.9 37.286                   
fit_lcs_extra_main_weak_ideal   26 6561.0 6689.0 37.579     0.2714       2
fit_lcs_extra_main_strong_ideal 30 6567.4 6677.1 51.956    13.5083       4
                                Pr(>Chisq)   
fit_lcs_extra_main_config_ideal              
fit_lcs_extra_main_weak_ideal     0.873105   
fit_lcs_extra_main_strong_ideal   0.009042 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_extra_ideal <- broom::tidy(fit_lcs_extra_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = "**")
kable(params_main_lcs_extra_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a 1.507 3.943 5.331 0.000 **
d_extra_1 ~1 d_int_b 0.414 1.385 1.459 0.145 **
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.909 2.690 4.199 0
d_extra_1 ~1 d_int 0.909 2.692 4.199 0

Increase in ideal-self extraversion is significantly higher in the self-acceptance group (n.s. in the self-improvement group).

Agreeableness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_ideal, fit_lcs_agree_main_weak_ideal, fit_lcs_agree_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_ideal 24 6463.0 6600.1 23.251                   
fit_lcs_agree_main_weak_ideal   26 6460.5 6588.5 24.761     1.2897       2
fit_lcs_agree_main_strong_ideal 30 6454.4 6564.1 26.639     1.6888       4
                                Pr(>Chisq)
fit_lcs_agree_main_config_ideal           
fit_lcs_agree_main_weak_ideal       0.5247
fit_lcs_agree_main_strong_ideal     0.7927
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_agree_ideal <- broom::tidy(fit_lcs_agree_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a 0.811 2.664 4.032 0
d_agree_1 ~1 d_int_b 0.989 3.388 3.855 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.907 2.921 5.453 0
d_agree_1 ~1 d_int 0.907 3.161 5.453 0

Similar change in agreeableness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Conscientiousness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_ideal, fit_lcs_consc_main_weak_ideal, fit_lcs_consc_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_ideal 24 5537.1 5674.2 34.915                   
fit_lcs_consc_main_weak_ideal   26 5535.2 5663.2 37.032     1.5333       2
fit_lcs_consc_main_strong_ideal 30 5529.9 5639.7 39.771     1.8257       4
                                Pr(>Chisq)
fit_lcs_consc_main_config_ideal           
fit_lcs_consc_main_weak_ideal       0.4646
fit_lcs_consc_main_strong_ideal     0.7678
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_consc_ideal <- broom::tidy(fit_lcs_consc_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 1.302 3.836 3.002 0.003
d_consc_1 ~1 d_int_b 1.505 4.367 4.888 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 1.404 4.058 5.286 0
d_consc_1 ~1 d_int 1.404 4.159 5.286 0

Similar change in conscientiousness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

neuroticism (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_ideal, fit_lcs_neuro_main_weak_ideal, fit_lcs_neuro_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_ideal 24 5779.9 5917.0 46.031                   
fit_lcs_neuro_main_weak_ideal   26 5777.0 5905.0 47.162     1.0171       2
fit_lcs_neuro_main_strong_ideal 30 5771.8 5881.5 49.926     2.5394       4
                                Pr(>Chisq)
fit_lcs_neuro_main_config_ideal           
fit_lcs_neuro_main_weak_ideal       0.6014
fit_lcs_neuro_main_strong_ideal     0.6376
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_neuro_ideal <- broom::tidy(fit_lcs_neuro_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a 0.459 1.467 3.657 0
d_neuro_1 ~1 d_int_b 0.476 1.422 4.256 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int 0.47 1.494 5.583 0
d_neuro_1 ~1 d_int 0.47 1.408 5.583 0

Very similar change in neuroticism in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Openness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_ideal, fit_lcs_openn_main_weak_ideal, fit_lcs_openn_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_ideal 24 6662.5 6799.7 36.707                   
fit_lcs_openn_main_weak_ideal   26 6659.5 6787.5 37.690     0.9424       2
fit_lcs_openn_main_strong_ideal 30 6656.2 6765.9 42.399     4.2416       4
                                Pr(>Chisq)
fit_lcs_openn_main_config_ideal           
fit_lcs_openn_main_weak_ideal       0.6243
fit_lcs_openn_main_strong_ideal     0.3743
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_openn_ideal <- broom::tidy(fit_lcs_openn_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.683 2.817 2.743 0.006
d_openn_1 ~1 d_int_b 0.841 3.433 2.913 0.004
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.776 3.134 4.024 0
d_openn_1 ~1 d_int 0.776 3.219 4.024 0

Similar change in ideal-self openness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

7.1.3.4 Summary of latent main effects
params_main_summary <- bind_rows(
  params_main_lcs_extra_current %>% mutate(trait = names(b5_vars)[1], self = "current") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_extra_ideal %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_agree_current %>% mutate(trait = names(b5_vars)[2], self = "current") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_agree_ideal %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_consc_current %>% mutate(trait = names(b5_vars)[3], self = "current") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_consc_ideal %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_neuro_current %>% mutate(trait = names(b5_vars)[4], self = "current") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_neuro_ideal %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_openn_current %>% mutate(trait = names(b5_vars)[5], self = "current") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_openn_ideal %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% select(trait, self, group = label, estimate, p.value, sig_diff)
) %>% mutate(group = ifelse(group=="d_int_a", "accept", "improve"))

kable(params_main_summary, digits = 3)
trait self group estimate p.value sig_diff
extraversion current accept 0.682 0.000
extraversion current improve 0.655 0.000
extraversion ideal accept 1.507 0.000 **
extraversion ideal improve 0.414 0.145 **
agreeableness current accept 0.553 0.045
agreeableness current improve 0.705 0.000
agreeableness ideal accept 0.811 0.000
agreeableness ideal improve 0.989 0.000
conscientiousness current accept 0.575 0.000
conscientiousness current improve 0.663 0.000
conscientiousness ideal accept 1.302 0.003
conscientiousness ideal improve 1.505 0.000
neuroticism current accept 0.391 0.009
neuroticism current improve 0.548 0.000
neuroticism ideal accept 0.459 0.000
neuroticism ideal improve 0.476 0.000
openness current accept 0.812 0.000 *
openness current improve 0.060 0.676 *
openness ideal accept 0.683 0.006
openness ideal improve 0.841 0.004

7.2 Personal project dimensions (b)

We will explore b) whether the extent of change/acceptance is related to personal project dimension variables.

For now, I use the personal project dimension variables assessed at T1:

  • Skill-building group: “How important is it for you to change your personality?”
  • Skill-building group: “How difficult is it for you to work on changing your personality?”
  • Self-acceptance group: “How important is it for you to accept your personality?”
  • Self-acceptance group: “How difficult is it for you to work on accepting your personality?”

They were, however, also assessed at T2:

  • Skill-building group: “During this study, how important was it for you to change your personality?”
  • Skill-building group: “During this study, how difficult was it for you to work on changing your personality?”
  • Self-acceptance group: “During this study, how important was it for you to accept your personality?”
  • Self-acceptance group: “During this study, how difficult was it for you to work on accepting your personality?”

7.2.1 Personal project dimensions as moderators of change in personality in self-improvement group

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sb_ppd <- df_sbsa %>% 
  filter(rando=="Self-Improvement") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb01"))) %>% # Personal project dimensions - self improvement
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb01")))) %>% 
  select(-c(sb01_01_t2, sb01_02_t2))
# colnames(df_sbsa_wide_pers_sb_ppd)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sb_ppd <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Improvement") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sb_ppd)

# need to form a mean score because some models did not converge when using the latent factor of PPD (but moderate to high correlation between the two items)
df_sbsa_wide_pers_sb_ppd <- df_sbsa_wide_pers_sb_ppd %>% mutate(ppd = rowMeans(across(c(sb01_01_t1, sb01_02_t1)), na.rm=T))
7.2.1.1 Big Five traits

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goals

trait_template_ppd_improve <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ ppd             # This estimates the moderation effect on personality at T1
d_trait_1 ~ ppd            # This estimates the moderation effect on the change score

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_ppd_improve, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), trait_model_fit))
}  
7.2.1.1.1 Extraversion: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 19 4683.753 4758.007 0.994 0.034 0.031
# parameters of interest
params_lcs_extra_curr_ppd <- broom::tidy(fit_mi_lcs_extra_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ ppd", "ppd ~~ ppd", "extra_t1 ~ ppd", # change ppd
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.003 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.610 NA NA
d_extra_1 ~1 -0.178 -0.367 0.011 -0.507 -1.843 0.065
extra_t1 ~1 3.306 3.050 3.561 5.722 25.397 0.000
d_extra_1 ~~ d_extra_1 0.116 0.072 0.161 0.943 5.151 0.000
extra_t1 ~~ d_extra_1 -0.050 -0.080 -0.020 -0.264 -3.282 0.001
extra_t1 ~ ppd -0.159 -0.230 -0.088 -0.255 -4.399 0.000
d_extra_1 ~ ppd 0.090 0.032 0.148 0.238 3.040 0.002
ppd ~~ ppd 0.857 0.741 0.973 1.000 14.448 0.000

Personal project dimensions significantly moderate changes in extraversion (current-self), b = 0.09, p = 0.002.

7.2.1.1.2 Agreeableness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 19 4167.488 4241.742 0.982 0.052 0.039
# parameters of interest
params_lcs_agree_curr_ppd <- broom::tidy(fit_mi_lcs_agree_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ ppd", "ppd ~~ ppd", "agree_t1 ~ ppd", # change ppd
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.061 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA
d_agree_1 ~1 0.083 -0.051 0.217 0.387 1.218 0.223
agree_t1 ~1 3.481 3.262 3.701 8.242 31.072 0.000
d_agree_1 ~~ d_agree_1 0.046 0.023 0.070 1.000 3.834 0.000
agree_t1 ~~ d_agree_1 -0.033 -0.051 -0.016 -0.367 -3.696 0.000
agree_t1 ~ ppd -0.036 -0.096 0.024 -0.079 -1.182 0.237
d_agree_1 ~ ppd -0.002 -0.040 0.036 -0.008 -0.098 0.922
ppd ~~ ppd 0.857 0.741 0.974 1.000 14.436 0.000

The moderation effect of personal project dimensions with the agreeableness change score (current-self) is not significantly different from zero, b = -0.002, p = 0.922.

7.2.1.1.3 Conscientiousness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 19 4379.512 4453.765 0.998 0.025 0.024
# parameters of interest
params_lcs_consc_curr_ppd <- broom::tidy(fit_mi_lcs_consc_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ ppd", "ppd ~~ ppd", "consc_t1 ~ ppd", # change ppd
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.037 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.507 NA NA
d_consc_1 ~1 0.047 -0.117 0.210 0.129 0.559 0.576
consc_t1 ~1 4.257 3.968 4.547 5.754 28.822 0.000
d_consc_1 ~~ d_consc_1 0.130 0.086 0.174 0.997 5.770 0.000
consc_t1 ~~ d_consc_1 -0.081 -0.122 -0.039 -0.313 -3.826 0.000
consc_t1 ~ ppd -0.204 -0.287 -0.121 -0.256 -4.799 0.000
d_consc_1 ~ ppd 0.022 -0.026 0.071 0.057 0.902 0.367
ppd ~~ ppd 0.858 0.742 0.975 1.000 14.423 0.000

The moderation effect of personal project dimensions with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.022, p = 0.367.

7.2.1.1.4 Neuroticism: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 19 4836.495 4910.749 0.996 0.036 0.023
# parameters of interest
params_lcs_neuro_curr_ppd <- broom::tidy(fit_mi_lcs_neuro_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ ppd", "ppd ~~ ppd", "neuro_t1 ~ ppd", # change ppd
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.029 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.629 NA NA
d_neuro_1 ~1 0.085 -0.128 0.298 0.172 0.779 0.436
neuro_t1 ~1 2.507 2.161 2.853 3.120 14.202 0.000
d_neuro_1 ~~ d_neuro_1 0.235 0.164 0.306 0.974 6.506 0.000
neuro_t1 ~~ d_neuro_1 -0.117 -0.169 -0.066 -0.319 -4.484 0.000
neuro_t1 ~ ppd 0.285 0.190 0.380 0.329 5.868 0.000
d_neuro_1 ~ ppd -0.086 -0.148 -0.023 -0.162 -2.680 0.007
ppd ~~ ppd 0.857 0.741 0.973 1.000 14.450 0.000

The moderation effect of personal project dimensions with the neuroticism change score (current-self) is not significantly different from zero, b = -0.086, p = 0.007.

7.2.1.1.5 Openness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 19 4487.495 4561.749 0.99 0.044 0.024
# parameters of interest
params_lcs_openn_curr_ppd <- broom::tidy(fit_mi_lcs_openn_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ ppd", "ppd ~~ ppd", "openn_t1 ~ ppd", # change ppd
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.913 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.410 NA NA
d_openn_1 ~1 0.067 -0.060 0.194 0.342 1.036 0.300
openn_t1 ~1 3.468 3.269 3.667 7.975 34.200 0.000
d_openn_1 ~~ d_openn_1 0.038 0.018 0.059 1.000 3.621 0.000
openn_t1 ~~ d_openn_1 0.000 -0.016 0.015 -0.003 -0.027 0.978
openn_t1 ~ ppd -0.010 -0.064 0.045 -0.020 -0.343 0.731
d_openn_1 ~ ppd -0.003 -0.040 0.034 -0.014 -0.151 0.880
ppd ~~ ppd 0.857 0.741 0.974 1.000 14.443 0.000

The moderation effect of personal project dimensions with the openness change score (current-self) is not significantly different from zero, b = -0.003, p = 0.88.

7.2.1.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create templates:

facet_template_ppd_improve <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
facet_t1 ~ ppd             # This estimates the moderation effect on personality at T1
d_facet_1 ~ ppd            # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_ppd_improve, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), facet_model_fit))
}  
7.2.1.2.1 Sociability - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8635.355 8725.241 0.945 0.078 0.047
# parameters of interest
params_lcs_socia_curr_ppd <- broom::tidy(fit_mi_lcs_socia_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ ppd", "ppd ~~ ppd", "d_socia_1 ~ ppd", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.028 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.647 NA NA
d_socia_1 ~1 -0.166 -0.489 0.157 -0.314 -1.009 0.313
socia_t1 ~1 3.128 2.716 3.540 3.718 14.874 0.000
d_socia_1 ~~ d_socia_1 0.271 0.162 0.381 0.969 4.873 0.000
socia_t1 ~~ d_socia_1 -0.151 -0.232 -0.070 -0.347 -3.647 0.000
d_socia_1 ~ ppd 0.101 0.003 0.198 0.176 2.025 0.043
ppd ~~ ppd 0.857 0.741 0.974 1.000 14.445 0.000

The moderation effect of personal project dimensions with the sociability change score (current-self) is not significantly different from zero, b = 0.101, p = 0.043.

7.2.1.2.2 Assertiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8940.366 9030.252 0.998 0.011 0.036
# parameters of interest
params_lcs_asser_curr_ppd <- broom::tidy(fit_mi_lcs_asser_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ ppd", "ppd ~~ ppd", "d_asser_1 ~ ppd", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.994 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.424 NA NA
d_asser_1 ~1 -0.193 -0.392 0.005 -0.794 -1.908 0.056
asser_t1 ~1 3.520 3.240 3.801 6.159 24.604 0.000
d_asser_1 ~~ d_asser_1 0.055 0.007 0.103 0.925 2.230 0.026
asser_t1 ~~ d_asser_1 -0.019 -0.055 0.016 -0.148 -1.074 0.283
d_asser_1 ~ ppd 0.072 0.011 0.133 0.274 2.328 0.020
ppd ~~ ppd 0.857 0.741 0.974 1.000 14.440 0.000

Personal project dimensions significantly moderate changes in assertiveness (current-self), b = 0.072, p = 0.02.

7.2.1.2.3 Energy - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8907.562 8997.448 0.971 0.048 0.038
# parameters of interest
params_lcs_energ_curr_ppd <- broom::tidy(fit_mi_lcs_energ_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ ppd", "ppd ~~ ppd", "d_energ_1 ~ ppd", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.996 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.553 NA NA
d_energ_1 ~1 0.041 -0.099 0.181 0.185 0.577 0.564
energ_t1 ~1 2.189 1.945 2.433 5.462 17.554 0.000
d_energ_1 ~~ d_energ_1 0.048 0.011 0.086 0.974 2.524 0.012
energ_t1 ~~ d_energ_1 -0.019 -0.039 0.001 -0.231 -1.840 0.066
d_energ_1 ~ ppd -0.039 -0.082 0.004 -0.162 -1.772 0.076
ppd ~~ ppd 0.857 0.741 0.973 1.000 14.445 0.000

The moderation effect of personal project dimensions with the energy change score (current-self) is not significantly different from zero, b = -0.039, p = 0.076.

7.2.1.2.4 Compassion - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8653.208 8743.094 0.98 0.034 0.042
# parameters of interest
params_lcs_compa_curr_ppd <- broom::tidy(fit_mi_lcs_compa_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ ppd", "ppd ~~ ppd", "d_compa_1 ~ ppd", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.139 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.403 NA NA
d_compa_1 ~1 -0.053 -0.302 0.197 -0.208 -0.413 0.679
compa_t1 ~1 4.232 3.853 4.611 5.913 21.908 0.000
d_compa_1 ~~ d_compa_1 0.062 -0.015 0.140 0.972 1.576 0.115
compa_t1 ~~ d_compa_1 -0.090 -0.166 -0.013 -0.503 -2.303 0.021
d_compa_1 ~ ppd 0.045 -0.026 0.116 0.166 1.253 0.210
ppd ~~ ppd 0.857 0.741 0.974 1.000 14.443 0.000

The moderation effect of personal project dimensions with the compassion change score (current-self) is not significantly different from zero, b = 0.045, p = 0.21.

7.2.1.2.5 Respectfulness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 7909.711 7999.597 0.935 0.072 0.058
# parameters of interest
params_lcs_respe_curr_ppd <- broom::tidy(fit_mi_lcs_respe_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ ppd", "ppd ~~ ppd", "d_respe_1 ~ ppd", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.127 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.631 NA NA
d_respe_1 ~1 0.133 -0.056 0.322 0.407 1.378 0.168
respe_t1 ~1 4.569 4.290 4.848 7.834 32.044 0.000
d_respe_1 ~~ d_respe_1 0.106 0.052 0.161 0.997 3.830 0.000
respe_t1 ~~ d_respe_1 -0.090 -0.149 -0.032 -0.477 -3.029 0.002
d_respe_1 ~ ppd -0.020 -0.075 0.036 -0.056 -0.694 0.488
ppd ~~ ppd 0.857 0.741 0.974 1.000 14.443 0.000

The moderation effect of personal project dimensions with the respectfulness change score (current-self) is not significantly different from zero, b = -0.02, p = 0.488.

7.2.1.2.6 Trust - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 9020.237 9110.123 0.956 0.055 0.043
# parameters of interest
params_lcs_trust_curr_ppd <- broom::tidy(fit_mi_lcs_trust_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ ppd", "ppd ~~ ppd", "d_trust_1 ~ ppd", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.026 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.559 NA NA
d_trust_1 ~1 -0.133 -0.349 0.084 -0.408 -1.203 0.229
trust_t1 ~1 2.807 2.496 3.119 4.703 17.669 0.000
d_trust_1 ~~ d_trust_1 0.106 0.014 0.197 1.000 2.261 0.024
trust_t1 ~~ d_trust_1 -0.062 -0.123 -0.001 -0.318 -1.980 0.048
d_trust_1 ~ ppd 0.006 -0.059 0.071 0.018 0.186 0.853
ppd ~~ ppd 0.857 0.741 0.974 1.000 14.444 0.000

The moderation effect of personal project dimensions with the trust change score (current-self) is not significantly different from zero, b = 0.006, p = 0.853.

7.2.1.2.7 Organization - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8564.569 8654.455 0.977 0.055 0.034
# parameters of interest
params_lcs_organ_curr_ppd <- broom::tidy(fit_mi_lcs_organ_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ ppd", "ppd ~~ ppd", "d_organ_1 ~ ppd", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.077 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.542 NA NA
d_organ_1 ~1 0.133 -0.140 0.407 0.257 0.954 0.340
organ_t1 ~1 2.139 1.693 2.585 2.070 9.400 0.000
d_organ_1 ~~ d_organ_1 0.265 0.148 0.381 0.980 4.450 0.000
organ_t1 ~~ d_organ_1 -0.194 -0.289 -0.100 -0.373 -4.026 0.000
d_organ_1 ~ ppd -0.079 -0.159 0.001 -0.141 -1.931 0.053
ppd ~~ ppd 0.858 0.742 0.975 1.000 14.437 0.000

The moderation effect of personal project dimensions with the organization change score (current-self) is not significantly different from zero, b = -0.079, p = 0.053.

7.2.1.2.8 Productiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8485.898 8575.784 0.976 0.05 0.037
# parameters of interest
params_lcs_produ_curr_ppd <- broom::tidy(fit_mi_lcs_produ_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ ppd", "ppd ~~ ppd", "d_produ_1 ~ ppd", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.050 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.512 NA NA
d_produ_1 ~1 -0.010 -0.249 0.230 -0.025 -0.078 0.938
produ_t1 ~1 2.511 2.161 2.862 3.268 14.040 0.000
d_produ_1 ~~ d_produ_1 0.139 0.070 0.208 0.990 3.953 0.000
produ_t1 ~~ d_produ_1 -0.089 -0.149 -0.028 -0.324 -2.870 0.004
d_produ_1 ~ ppd -0.041 -0.111 0.028 -0.102 -1.163 0.245
ppd ~~ ppd 0.857 0.741 0.973 1.000 14.444 0.000

The moderation effect of personal project dimensions with the productiveness change score (current-self) is not significantly different from zero, b = -0.041, p = 0.245.

7.2.1.2.9 Responsibility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8627.266 8717.152 0.913 0.083 0.081
# parameters of interest
params_lcs_respo_curr_ppd <- broom::tidy(fit_mi_lcs_respo_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ ppd", "ppd ~~ ppd", "d_respo_1 ~ ppd", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.986 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.465 NA NA
d_respo_1 ~1 0.172 0.014 0.329 0.821 2.133 0.033
respo_t1 ~1 3.964 3.724 4.203 8.937 32.420 0.000
d_respo_1 ~~ d_respo_1 0.043 0.004 0.081 0.973 2.150 0.032
respo_t1 ~~ d_respo_1 -0.022 -0.048 0.003 -0.248 -1.707 0.088
d_respo_1 ~ ppd -0.037 -0.083 0.008 -0.165 -1.609 0.108
ppd ~~ ppd 0.858 0.742 0.975 1.000 14.415 0.000

Personal project dimensions significantly moderate changes in responsibility (current-self), b = -0.037, p = 0.108.

7.2.1.2.10 Anxiety - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8952.143 9042.029 0.983 0.038 0.039
# parameters of interest
params_lcs_anxie_curr_ppd <- broom::tidy(fit_mi_lcs_anxie_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ ppd", "ppd ~~ ppd", "d_anxie_1 ~ ppd", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.075 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.680 NA NA
d_anxie_1 ~1 -0.170 -0.485 0.145 -0.292 -1.056 0.291
anxie_t1 ~1 3.777 3.361 4.193 4.114 17.777 0.000
d_anxie_1 ~~ d_anxie_1 0.326 0.152 0.501 0.968 3.669 0.000
anxie_t1 ~~ d_anxie_1 -0.199 -0.312 -0.086 -0.395 -3.446 0.001
d_anxie_1 ~ ppd 0.113 0.023 0.203 0.180 2.450 0.014
ppd ~~ ppd 0.857 0.741 0.973 1.000 14.448 0.000

The moderation effect of personal project dimensions with the anxiety change score (current-self) is not significantly different from zero, b = 0.113, p = 0.014.

7.2.1.2.11 Depression - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8806.774 8896.659 0.95 0.08 0.057
# parameters of interest
params_lcs_depre_curr_ppd <- broom::tidy(fit_mi_lcs_depre_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ ppd", "ppd ~~ ppd", "d_depre_1 ~ ppd", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.975 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.573 NA NA
d_depre_1 ~1 -0.067 -0.249 0.116 -0.181 -0.718 0.473
depre_t1 ~1 3.796 3.484 4.108 6.055 23.861 0.000
d_depre_1 ~~ d_depre_1 0.132 0.072 0.192 0.975 4.328 0.000
depre_t1 ~~ d_depre_1 -0.044 -0.079 -0.010 -0.209 -2.550 0.011
d_depre_1 ~ ppd 0.063 0.010 0.117 0.159 2.307 0.021
ppd ~~ ppd 0.857 0.741 0.973 1.000 14.451 0.000

The moderation effect of personal project dimensions with the depression change score (current-self) is not significantly different from zero, b = 0.063, p = 0.021.

7.2.1.2.12 Volatility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8937.953 9027.839 0.984 0.042 0.031
# parameters of interest
params_lcs_volat_curr_ppd <- broom::tidy(fit_mi_lcs_volat_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ ppd", "ppd ~~ ppd", "d_volat_1 ~ ppd", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.058 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.629 NA NA
d_volat_1 ~1 0.020 -0.269 0.308 0.038 0.135 0.893
volat_t1 ~1 2.343 1.932 2.754 2.677 11.181 0.000
d_volat_1 ~~ d_volat_1 0.269 0.179 0.359 0.990 5.850 0.000
volat_t1 ~~ d_volat_1 -0.164 -0.232 -0.096 -0.375 -4.725 0.000
d_volat_1 ~ ppd -0.056 -0.141 0.028 -0.100 -1.306 0.191
ppd ~~ ppd 0.857 0.741 0.973 1.000 14.446 0.000

The moderation effect of personal project dimensions with the volatility change score (current-self) is not significantly different from zero, b = -0.056, p = 0.191.

7.2.1.2.13 Curiosity - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8715.505 8805.391 0.975 0.04 0.047
# parameters of interest
params_lcs_curio_curr_ppd <- broom::tidy(fit_mi_lcs_curio_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ ppd", "ppd ~~ ppd", "d_curio_1 ~ ppd", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.991 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.411 NA NA
d_curio_1 ~1 0.119 -0.065 0.304 0.613 1.269 0.205
curio_t1 ~1 3.948 3.697 4.198 8.392 30.915 0.000
d_curio_1 ~~ d_curio_1 0.038 -0.009 0.084 0.994 1.593 0.111
curio_t1 ~~ d_curio_1 -0.017 -0.047 0.014 -0.182 -1.068 0.286
d_curio_1 ~ ppd -0.016 -0.071 0.038 -0.077 -0.586 0.558
ppd ~~ ppd 0.857 0.741 0.974 1.000 14.443 0.000

The moderation effect of personal project dimensions with the curiosity change score (current-self) is not significantly different from zero, b = -0.016, p = 0.558.

7.2.1.2.14 Aesthetic - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):
(here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_curr_ppd <- '
aesth_t1 =~ 1*bf05_05_t1 + lamb2*bf05_20_t1 + lamb3*bf05_35_t1 + lamb4*bf05_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf05_05_t2 + lamb2*bf05_20_t2 + lamb3*bf05_35_t2 + lamb4*bf05_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ aesth_t1       # This estimates the variance of aesth_t1 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
aesth_t1 ~ ppd             # This estimates the moderation effect on personality at T1
d_aesth_1 ~ ppd            # This estimates the moderation effect on the change score

bf05_05_t1 ~~ bf05_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf05_20_t1 ~~ bf05_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf05_35_t1 ~~ bf05_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf05_50_t1 ~~ bf05_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf05_05_t1 ~~ res1*bf05_05_t1   # This allows residual variance on indicator X1 at T1 
bf05_20_t1 ~~ res2*bf05_20_t1   # This allows residual variance on indicator X2 at T1
bf05_35_t1 ~~ res3*bf05_35_t1   # This allows residual variance on indicator X3 at T1
bf05_50_t1 ~~ res4*bf05_50_t1   # This allows residual variance on indicator X4 at T1

bf05_05_t2 ~~ res1*bf05_05_t2  # This allows residual variance on indicator X1 at T2 
bf05_20_t2 ~~ res2*bf05_20_t2  # This allows residual variance on indicator X2 at T2 
bf05_35_t2 ~~ res3*bf05_35_t2  # This allows residual variance on indicator X3 at T2
bf05_50_t2 ~~ res4*bf05_50_t2  # This allows residual variance on indicator X4 at T2

bf05_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf05_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf05_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf05_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf05_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf05_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf05_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf05_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ppd ~~ ppd

ppd ~ 1
'

fit_mi_lcs_aesth_curr_ppd <- lavaan(mi_lcs_aesth_curr_ppd, 
                                            data=df_sbsa_wide_pers_sb_ppd %>% filter(!is.na(bf05_05_t1) & !is.na(bf05_05_t2)), 
                                            estimator='mlr', fixed.x=FALSE, missing="fiml")
# This model did not converge properly with missing data and FIML -> no problem when only using complete data
summary(fit_mi_lcs_aesth_curr_ppd, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 197 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        33
  Number of equality constraints                    10

  Number of observations                           331
  Number of missing patterns                         2

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                31.638      29.022
  Degrees of freedom                                31          31
  P-value (Chi-square)                           0.434       0.568
  Scaling correction factor                                  1.090
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1054.713     820.718
  Degrees of freedom                                36          36
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.285

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.999       1.000
  Tucker-Lewis Index (TLI)                       0.999       1.003
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.003

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4199.936   -4199.936
  Scaling correction factor                                  0.857
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4184.117   -4184.117
  Scaling correction factor                                  1.150
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                8445.872    8445.872
  Bayesian (BIC)                              8533.321    8533.321
  Sample-size adjusted Bayesian (SABIC)       8460.364    8460.364

Root Mean Square Error of Approximation:

  RMSEA                                          0.008       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.042       0.036
  P-value H_0: RMSEA <= 0.050                    0.987       0.996
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.039
  P-value H_0: Robust RMSEA <= 0.050                         0.992
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.033       0.033

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b05_05_           1.000                               0.042    0.032
    b05_20_ (lmb2)   22.164    1.133   19.565    0.000    0.927    0.835
    b05_35_ (lmb3)   20.429    1.125   18.159    0.000    0.854    0.800
    b05_50_ (lmb4)  -16.841    1.222  -13.783    0.000   -0.704   -0.517
  aesth_t2 =~                                                           
    b05_05_           1.000                               0.043    0.032
    b05_20_ (lmb2)   22.164    1.133   19.565    0.000    0.951    0.842
    b05_35_ (lmb3)   20.429    1.125   18.159    0.000    0.876    0.808
    b05_50_ (lmb4)  -16.841    1.222  -13.783    0.000   -0.722   -0.527
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.584    0.584

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.975    0.975
  aesth_t1 ~                                                            
    ppd               0.003    0.003    1.153    0.249    0.073    0.068
  d_aesth_1 ~                                                           
    ppd              -0.003    0.002   -1.250    0.211   -0.114   -0.106

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .aesth_t1 ~~                                                           
   .d_aesth_1        -0.000    0.000   -2.609    0.009   -0.251   -0.251
 .bf05_05_t1 ~~                                                         
   .bf05_05_t2        0.550    0.106    5.212    0.000    0.550    0.316
 .bf05_20_t1 ~~                                                         
   .bf05_20_t2        0.103    0.070    1.474    0.140    0.103    0.278
 .bf05_35_t1 ~~                                                         
   .bf05_35_t2        0.111    0.061    1.830    0.067    0.111    0.272
 .bf05_50_t1 ~~                                                         
   .bf05_50_t2        0.821    0.098    8.356    0.000    0.821    0.604

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
   .d_aesth_1         0.012    0.008    1.478    0.139    0.462    0.462
   .aesth_t1          2.967    0.059   49.966    0.000   70.950   70.950
   .bf05_05_1         0.000                               0.000    0.000
   .bf05_20_1 (m2)  -62.174    3.176  -19.578    0.000  -62.174  -56.036
   .bf05_35_1 (m3)  -56.995    3.060  -18.625    0.000  -56.995  -53.392
   .bf05_50_1 (m4)   52.719    3.631   14.521    0.000   52.719   38.702
   .bf05_05_2         0.000                               0.000    0.000
   .bf05_20_2 (m2)  -62.174    3.176  -19.578    0.000  -62.174  -55.048
   .bf05_35_2 (m3)  -56.995    3.060  -18.625    0.000  -56.995  -52.527
   .bf05_50_2 (m4)   52.719    3.631   14.521    0.000   52.719   38.436
    ppd               3.455    0.051   67.142    0.000    3.455    3.713

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
   .d_sth_1           0.001    0.000    3.919    0.000    0.989    0.989
   .asth_t1           0.002    0.000    9.808    0.000    0.995    0.995
   .b05_05_ (res1)    1.742    0.070   24.770    0.000    1.742    0.999
   .b05_20_ (res2)    0.372    0.077    4.842    0.000    0.372    0.302
   .b05_35_ (res3)    0.409    0.059    6.972    0.000    0.409    0.359
   .b05_50_ (res4)    1.359    0.099   13.767    0.000    1.359    0.733
   .b05_05_ (res1)    1.742    0.070   24.770    0.000    1.742    0.999
   .b05_20_ (res2)    0.372    0.077    4.842    0.000    0.372    0.291
   .b05_35_ (res3)    0.409    0.059    6.972    0.000    0.409    0.348
   .b05_50_ (res4)    1.359    0.099   13.767    0.000    1.359    0.723
    ppd               0.865    0.060   14.460    0.000    0.865    1.000
# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
331 23 8445.872 8533.321 0.999 0.008 0.033
# parameters of interest
params_lcs_aesth_curr_ppd <- broom::tidy(fit_mi_lcs_aesth_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ ppd", "ppd ~~ ppd", "d_aesth_1 ~ ppd", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.975 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.584 NA NA
d_aesth_1 ~1 0.012 -0.004 0.027 0.462 1.478 0.139
aesth_t1 ~1 2.967 2.851 3.084 70.950 49.966 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.989 3.919 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.251 -2.609 0.009
d_aesth_1 ~ ppd -0.003 -0.007 0.002 -0.106 -1.250 0.211
ppd ~~ ppd 0.865 0.748 0.983 1.000 14.460 0.000

The moderation effect of personal project dimensions with the aesthetic change score (current-self) is not significantly different from zero, b = -0.003, p = 0.211.

7.2.1.2.15 Imagination - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8514.815 8604.701 0.956 0.061 0.059
# parameters of interest
params_lcs_imagi_curr_ppd <- broom::tidy(fit_mi_lcs_imagi_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ ppd", "ppd ~~ ppd", "d_imagi_1 ~ ppd", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.969 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.473 NA NA
d_imagi_1 ~1 -0.031 -0.263 0.201 -0.088 -0.264 0.792
imagi_t1 ~1 3.887 3.553 4.222 5.359 22.792 0.000
d_imagi_1 ~~ d_imagi_1 0.124 0.042 0.206 0.990 2.950 0.003
imagi_t1 ~~ d_imagi_1 -0.042 -0.109 0.024 -0.167 -1.245 0.213
d_imagi_1 ~ ppd 0.038 -0.029 0.105 0.099 1.106 0.269
ppd ~~ ppd 0.857 0.741 0.974 1.000 14.441 0.000

The moderation effect of personal project dimensions with the imagination change score (current-self) is not significantly different from zero, b = 0.038, p = 0.269.

7.2.1.3 Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_ppd_improve <- bind_rows(
  #traits
  params_lcs_extra_curr_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_curr_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_curr_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_curr_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_curr_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_curr_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_curr_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_curr_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_curr_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_curr_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_curr_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_curr_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_curr_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_curr_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_curr_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_curr_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_curr_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_curr_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_curr_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_curr_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20)) %>% 
  select(trait, moderator, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_improve[1:5, ], digits = 3)
trait moderator estimate std.all statistic p.value
extraversion ppd 0.065 0.170 2.364 0.018
agreeableness ppd -0.009 -0.037 -0.490 0.624
conscientiousness ppd -0.010 -0.025 -0.400 0.689
neuroticism ppd -0.028 -0.052 -0.884 0.376
openness ppd -0.003 -0.014 -0.152 0.879

Only one moderator effect significantly differs from zero:

  • changes in current-level extraversion are moderated by the personal project dimensions

Results summary across the Big Five facets: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_improve[6:20, ], digits = 3)
trait moderator estimate std.all statistic p.value
sociability ppd 0.080 0.141 1.743 0.081
assertiveness ppd 0.064 0.243 2.094 0.036
energy ppd -0.019 -0.077 -0.852 0.394
compassion ppd 0.041 0.151 1.267 0.205
respectfulness ppd -0.033 -0.093 -1.353 0.176
trust ppd 0.010 0.027 0.311 0.756
organization ppd -0.039 -0.070 -1.011 0.312
productiveness ppd 0.000 0.000 -0.002 0.999
responsibility ppd -0.049 -0.217 -2.068 0.039
anxiety ppd 0.043 0.069 1.033 0.302
depression ppd 0.032 0.081 1.089 0.276
volatility ppd 0.003 0.005 0.075 0.941
curiosity ppd -0.014 -0.065 -0.506 0.613
aesthetic ppd -0.002 -0.089 -1.109 0.268
imagination ppd 0.030 0.079 0.877 0.380

Two significant moderation effects of personal project dimensions on the facet-level:
- Changes in current-level assertiveness and responsibility are moderated by personal project dimensions.

7.2.2 Personal project dimensions as moderators of change in personality in self-acceptance group

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sa_ppd <- df_sbsa %>% 
  filter(rando=="Self-Acceptance") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa01"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa01")))) %>% 
  select(-c(sa01_01_t2, sa01_02_t2)) 

# colnames(df_sbsa_wide_pers_sa_ppd)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sa_ppd <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sa_ppd)

# need to form a mean score because some models did not converge when using the latent factor of PPD (but high correlation between the two items)
df_sbsa_wide_pers_sa_ppd <- df_sbsa_wide_pers_sa_ppd %>% mutate(ppd = rowMeans(across(c(sa01_01_t1, sa01_02_t1)), na.rm=T))
7.2.2.1 Big Five traits

Run models for all traits with a template & loop:

Show the code
# create templates

trait_template_ppd_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ ppd             # This estimates the moderation effect on personality at T1
d_trait_1 ~ ppd            # This estimates the moderation effect on the change score

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_ppd_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), trait_model_fit))
}  
7.2.2.1.1 Extraversion: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 19 3928.928 4002.066 0.988 0.034 0.036
# parameters of interest
params_lcs_extra_ideal_ppd <- broom::tidy(fit_mi_lcs_extra_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ ppd", "ppd ~~ ppd", "extra_t1 ~ ppd", # acceptance ppd
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.070 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.902 NA NA
d_extra_1 ~1 -0.174 -0.460 0.112 -0.443 -1.194 0.233
extra_t1 ~1 3.849 3.546 4.152 8.243 24.875 0.000
d_extra_1 ~~ d_extra_1 0.154 0.084 0.224 0.995 4.311 0.000
extra_t1 ~~ d_extra_1 -0.090 -0.138 -0.043 -0.494 -3.716 0.000
extra_t1 ~ ppd -0.036 -0.114 0.043 -0.059 -0.895 0.371
d_extra_1 ~ ppd 0.036 -0.041 0.113 0.070 0.913 0.361
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.735 0.000

The moderation effect of personal project dimensions with the extraversion change score (ideal-self) is not significantly different from zero, b = 0.036, p = 0.361.

7.2.2.1.2 Agreeableness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 19 3938.359 4011.496 1 0 0.029
# parameters of interest
params_lcs_agree_ideal_ppd <- broom::tidy(fit_mi_lcs_agree_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ ppd", "ppd ~~ ppd", "agree_t1 ~ ppd", # acceptance ppd
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.986 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.672 NA NA
d_agree_1 ~1 -0.063 -0.294 0.169 -0.197 -0.532 0.595
agree_t1 ~1 3.389 3.062 3.716 7.266 20.324 0.000
d_agree_1 ~~ d_agree_1 0.101 0.061 0.141 0.999 4.961 0.000
agree_t1 ~~ d_agree_1 -0.048 -0.078 -0.018 -0.328 -3.171 0.002
agree_t1 ~ ppd 0.083 0.001 0.166 0.137 1.982 0.047
d_agree_1 ~ ppd 0.013 -0.046 0.072 0.032 0.441 0.659
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.737 0.000

The moderation effect of personal project dimensions with the agreeableness change score (ideal-self) is not significantly different from zero, b = 0.013, p = 0.659.

7.2.2.1.3 Conscientiousness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 19 3540.684 3613.821 0.991 0.037 0.039
# parameters of interest
params_lcs_consc_ideal_ppd <- broom::tidy(fit_mi_lcs_consc_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ ppd", "ppd ~~ ppd", "consc_t1 ~ ppd", # acceptance ppd
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.046 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.739 NA NA
d_consc_1 ~1 0.248 0.014 0.483 0.714 2.074 0.038
consc_t1 ~1 4.048 3.762 4.334 8.218 27.752 0.000
d_consc_1 ~~ d_consc_1 0.119 0.058 0.179 0.982 3.853 0.000
consc_t1 ~~ d_consc_1 -0.068 -0.129 -0.007 -0.403 -2.185 0.029
consc_t1 ~ ppd 0.087 0.015 0.159 0.135 2.364 0.018
d_consc_1 ~ ppd -0.061 -0.120 -0.001 -0.134 -2.001 0.045
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.738 0.000

The moderation effect of personal project dimensions with the conscientiousness change score (ideal-self) is not significantly different from zero, b = -0.061, p = 0.045.

7.2.2.1.4 Neuroticism: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 19 3633.173 3706.31 0.972 0.055 0.05
# parameters of interest
params_lcs_neuro_ideal_ppd <- broom::tidy(fit_mi_lcs_neuro_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ ppd", "ppd ~~ ppd", "neuro_t1 ~ ppd", # acceptance ppd
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.937 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.780 NA NA
d_neuro_1 ~1 -0.017 -0.250 0.216 -0.053 -0.144 0.885
neuro_t1 ~1 1.751 1.499 2.004 4.490 13.583 0.000
d_neuro_1 ~~ d_neuro_1 0.105 0.055 0.155 1.000 4.139 0.000
neuro_t1 ~~ d_neuro_1 -0.042 -0.071 -0.013 -0.333 -2.864 0.004
neuro_t1 ~ ppd -0.028 -0.092 0.037 -0.055 -0.843 0.399
d_neuro_1 ~ ppd 0.007 -0.054 0.069 0.017 0.237 0.813
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.737 0.000

The moderation effect of personal project dimensions with the neuroticism change score (ideal-self) is not significantly different from zero, b = 0.007, p = 0.813.

7.2.2.1.5 Openness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 19 3936.496 4009.633 0.98 0.05 0.037
# parameters of interest
params_lcs_openn_ideal_ppd <- broom::tidy(fit_mi_lcs_openn_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ ppd", "ppd ~~ ppd", "openn_t1 ~ ppd", # acceptance ppd
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.967 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.638 NA NA
d_openn_1 ~1 -0.029 -0.214 0.157 -0.122 -0.304 0.761
openn_t1 ~1 3.689 3.484 3.894 10.320 35.221 0.000
d_openn_1 ~~ d_openn_1 0.056 0.028 0.083 1.000 4.008 0.000
openn_t1 ~~ d_openn_1 -0.023 -0.040 -0.007 -0.278 -2.844 0.004
openn_t1 ~ ppd 0.032 -0.020 0.084 0.069 1.218 0.223
d_openn_1 ~ ppd 0.004 -0.044 0.052 0.013 0.167 0.868
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.737 0.000

The moderation effect of personal project dimensions with the openness change score (ideal-self) is not significantly different from zero, b = 0.004, p = 0.868.

7.2.2.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goal

facet_template_ppd_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
facet_t1 ~ ppd             # This estimates the moderation effect on personality at T1
d_facet_1 ~ ppd            # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_ppd_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), facet_model_fit))
}  
7.2.2.2.1 Sociability - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7931.159 8019.694 0.961 0.044 0.048
# parameters of interest
params_lcs_socia_ideal_ppd <- broom::tidy(fit_mi_lcs_socia_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ ppd", "ppd ~~ ppd", "d_socia_1 ~ ppd", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.049 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.747 NA NA
d_socia_1 ~1 -0.051 -0.291 0.190 -0.200 -0.412 0.681
socia_t1 ~1 4.408 4.155 4.660 12.439 34.233 0.000
d_socia_1 ~~ d_socia_1 0.064 0.018 0.110 1.000 2.714 0.007
socia_t1 ~~ d_socia_1 -0.038 -0.063 -0.012 -0.421 -2.935 0.003
d_socia_1 ~ ppd -0.002 -0.066 0.062 -0.006 -0.058 0.954
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.732 0.000

The moderation effect of personal project dimensions with the sociability change score (ideal-self) is not significantly different from zero, b = -0.002, p = 0.954.

7.2.2.2.2 Assertiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8187.854 8276.388 0.989 0.022 0.034
# parameters of interest
params_lcs_asser_ideal_ppd <- broom::tidy(fit_mi_lcs_asser_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ ppd", "ppd ~~ ppd", "d_asser_1 ~ ppd", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.012 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.749 NA NA
d_asser_1 ~1 -0.146 -0.326 0.033 -0.744 -1.597 0.110
asser_t1 ~1 4.312 4.109 4.516 16.208 41.555 0.000
d_asser_1 ~~ d_asser_1 0.038 0.001 0.075 0.987 2.031 0.042
asser_t1 ~~ d_asser_1 -0.020 -0.042 0.003 -0.378 -1.733 0.083
d_asser_1 ~ ppd 0.030 -0.018 0.078 0.116 1.213 0.225
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.736 0.000

The moderation effect of personal project dimensions with the assertiveness change score (ideal-self) is not significantly different from zero, b = 0.03, p = 0.225.

7.2.2.2.3 Energy - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7549.389 7637.923 0.911 0.05 0.06
# parameters of interest
params_lcs_energ_ideal_ppd <- broom::tidy(fit_mi_lcs_energ_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ ppd", "ppd ~~ ppd", "d_energ_1 ~ ppd", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.105 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.930 NA NA
d_energ_1 ~1 -0.010 -0.210 0.190 -0.041 -0.095 0.925
energ_t1 ~1 2.485 2.252 2.717 8.916 20.961 0.000
d_energ_1 ~~ d_energ_1 0.055 -0.032 0.142 1.000 1.234 0.217
energ_t1 ~~ d_energ_1 -0.035 -0.096 0.027 -0.530 -1.095 0.274
d_energ_1 ~ ppd -0.001 -0.050 0.048 -0.002 -0.025 0.980
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.738 0.000

The moderation effect of personal project dimensions with the energy change score (ideal-self) is not significantly different from zero, b = -0.001, p = 0.98.

7.2.2.2.4 Compassion - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8569.885 8658.42 1 0 0.034
# parameters of interest
params_lcs_compa_ideal_ppd <- broom::tidy(fit_mi_lcs_compa_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ ppd", "ppd ~~ ppd", "d_compa_1 ~ ppd", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.014 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.580 NA NA
d_compa_1 ~1 0.007 -0.403 0.418 0.021 0.034 0.973
compa_t1 ~1 3.805 3.274 4.336 6.474 14.037 0.000
d_compa_1 ~~ d_compa_1 0.113 0.003 0.223 0.999 2.005 0.045
compa_t1 ~~ d_compa_1 -0.060 -0.132 0.011 -0.310 -1.665 0.096
d_compa_1 ~ ppd -0.013 -0.121 0.096 -0.029 -0.226 0.821
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.742 0.000

The moderation effect of personal project dimensions with the compassion change score (ideal-self) is not significantly different from zero, b = -0.013, p = 0.821.

7.2.2.2.5 Respectfulness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 6847.15 6935.684 0.932 0.059 0.057
# parameters of interest
params_lcs_respe_ideal_ppd <- broom::tidy(fit_mi_lcs_respe_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ ppd", "ppd ~~ ppd", "d_respe_1 ~ ppd", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.951 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.661 NA NA
d_respe_1 ~1 -0.057 -0.283 0.168 -0.242 -0.496 0.620
respe_t1 ~1 4.469 4.214 4.724 13.133 34.329 0.000
d_respe_1 ~~ d_respe_1 0.056 0.013 0.099 0.997 2.546 0.011
respe_t1 ~~ d_respe_1 -0.022 -0.054 0.010 -0.280 -1.370 0.171
d_respe_1 ~ ppd 0.017 -0.040 0.073 0.054 0.583 0.560
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.736 0.000

The moderation effect of personal project dimensions with the respectfulness change score (ideal-self) is not significantly different from zero, b = 0.017, p = 0.56.

7.2.2.2.6 Trust - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8175.243 8263.778 0.952 0.049 0.043
# parameters of interest
params_lcs_trust_ideal_ppd <- broom::tidy(fit_mi_lcs_trust_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ ppd", "ppd ~~ ppd", "d_trust_1 ~ ppd", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.983 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.642 NA NA
d_trust_1 ~1 -0.028 -0.305 0.250 -0.097 -0.195 0.846
trust_t1 ~1 2.133 1.786 2.481 4.893 12.034 0.000
d_trust_1 ~~ d_trust_1 0.081 0.030 0.132 0.998 3.114 0.002
trust_t1 ~~ d_trust_1 -0.037 -0.073 -0.001 -0.298 -2.012 0.044
d_trust_1 ~ ppd 0.015 -0.057 0.087 0.041 0.408 0.683
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.734 0.000

The moderation effect of personal project dimensions with the trust change score (ideal-self) is not significantly different from zero, b = 0.015, p = 0.683.

7.2.2.2.7 Organization - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7046.635 7135.17 0.951 0.045 0.048
# parameters of interest
params_lcs_organ_ideal_ppd <- broom::tidy(fit_mi_lcs_organ_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ ppd", "ppd ~~ ppd", "d_organ_1 ~ ppd", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.038 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.827 NA NA
d_organ_1 ~1 -0.132 -0.296 0.032 -0.656 -1.576 0.115
organ_t1 ~1 1.898 1.715 2.082 7.523 20.284 0.000
d_organ_1 ~~ d_organ_1 0.040 0.002 0.077 0.982 2.067 0.039
organ_t1 ~~ d_organ_1 -0.021 -0.041 -0.002 -0.431 -2.121 0.034
d_organ_1 ~ ppd 0.035 -0.008 0.078 0.134 1.612 0.107
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.739 0.000

The moderation effect of personal project dimensions with the organization change score (ideal-self) is not significantly different from zero, b = 0.035, p = 0.107.

7.2.2.2.8 Productiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 6553.056 6641.59 0.883 0.067 0.065
# parameters of interest
params_lcs_produ_ideal_ppd <- broom::tidy(fit_mi_lcs_produ_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ ppd", "ppd ~~ ppd", "d_produ_1 ~ ppd", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.083 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.740 NA NA
d_produ_1 ~1 -0.152 -0.382 0.079 -0.559 -1.290 0.197
produ_t1 ~1 1.712 1.458 1.967 4.308 13.178 0.000
d_produ_1 ~~ d_produ_1 0.073 0.013 0.133 0.991 2.375 0.018
produ_t1 ~~ d_produ_1 -0.048 -0.097 0.001 -0.447 -1.908 0.056
d_produ_1 ~ ppd 0.033 -0.027 0.093 0.093 1.069 0.285
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.737 0.000

The moderation effect of personal project dimensions with the productiveness change score (ideal-self) is not significantly different from zero, b = 0.033, p = 0.285.

7.2.2.2.9 Responsibility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7520.311 7608.845 0.987 0.024 0.042
# parameters of interest
params_lcs_respo_ideal_ppd <- broom::tidy(fit_mi_lcs_respo_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ ppd", "ppd ~~ ppd", "d_respo_1 ~ ppd", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.054 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.789 NA NA
d_respo_1 ~1 0.252 -0.054 0.558 0.666 1.616 0.106
respo_t1 ~1 3.954 3.574 4.334 7.820 20.374 0.000
d_respo_1 ~~ d_respo_1 0.141 0.036 0.247 0.986 2.622 0.009
respo_t1 ~~ d_respo_1 -0.081 -0.150 -0.013 -0.432 -2.344 0.019
d_respo_1 ~ ppd -0.058 -0.136 0.019 -0.118 -1.472 0.141
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.737 0.000

The moderation effect of personal project dimensions with the responsibility change score (ideal-self) is not significantly different from zero, b = -0.058, p = 0.141.

7.2.2.2.10 Anxiety - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8132.814 8221.348 0.896 0.047 0.049
# parameters of interest
params_lcs_anxie_ideal_ppd <- broom::tidy(fit_mi_lcs_anxie_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ ppd", "ppd ~~ ppd", "d_anxie_1 ~ ppd", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.854 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.769 NA NA
d_anxie_1 ~1 0.029 -0.384 0.442 0.110 0.138 0.890
anxie_t1 ~1 4.426 4.103 4.749 15.044 26.860 0.000
d_anxie_1 ~~ d_anxie_1 0.070 -0.044 0.184 0.997 1.200 0.230
anxie_t1 ~~ d_anxie_1 -0.019 -0.060 0.023 -0.240 -0.884 0.377
d_anxie_1 ~ ppd -0.020 -0.134 0.094 -0.058 -0.344 0.731
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.734 0.000

The moderation effect of personal project dimensions with the anxiety change score (ideal-self) is not significantly different from zero, b = -0.02, p = 0.731.

7.2.2.2.11 Depression - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 6585.959 6674.494 0.821 0.084 0.074
# parameters of interest
params_lcs_depre_ideal_ppd <- broom::tidy(fit_mi_lcs_depre_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ ppd", "ppd ~~ ppd", "d_depre_1 ~ ppd", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.063 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.812 NA NA
d_depre_1 ~1 -0.016 -0.190 0.158 -0.072 -0.181 0.857
depre_t1 ~1 4.411 4.220 4.602 15.111 45.242 0.000
d_depre_1 ~~ d_depre_1 0.050 0.003 0.096 0.999 2.100 0.036
depre_t1 ~~ d_depre_1 -0.030 -0.059 -0.001 -0.457 -2.018 0.044
d_depre_1 ~ ppd 0.009 -0.036 0.054 0.031 0.389 0.697
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.737 0.000

The moderation effect of personal project dimensions with the depression change score (ideal-self) is not significantly different from zero, b = 0.009, p = 0.697.

7.2.2.2.12 Volatility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7638.671 7727.205 0.955 0.038 0.046
# parameters of interest
params_lcs_volat_ideal_ppd <- broom::tidy(fit_mi_lcs_volat_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ ppd", "ppd ~~ ppd", "d_volat_1 ~ ppd", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.913 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.669 NA NA
d_volat_1 ~1 0.057 -0.266 0.379 0.179 0.345 0.730
volat_t1 ~1 1.745 1.416 2.074 4.033 10.396 0.000
d_volat_1 ~~ d_volat_1 0.100 0.021 0.179 1.000 2.485 0.013
volat_t1 ~~ d_volat_1 -0.032 -0.085 0.021 -0.231 -1.171 0.241
d_volat_1 ~ ppd -0.009 -0.094 0.076 -0.022 -0.209 0.834
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.738 0.000

The moderation effect of personal project dimensions with the volatility change score (ideal-self) is not significantly different from zero, b = -0.009, p = 0.834.

7.2.2.2.13 Curiosity - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8077.27 8165.805 0.988 0.02 0.04
# parameters of interest
params_lcs_curio_ideal_ppd <- broom::tidy(fit_mi_lcs_curio_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ ppd", "ppd ~~ ppd", "d_curio_1 ~ ppd", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.043 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.683 NA NA
d_curio_1 ~1 -0.082 -0.316 0.152 -0.407 -0.684 0.494
curio_t1 ~1 4.478 4.241 4.716 14.590 36.967 0.000
d_curio_1 ~~ d_curio_1 0.040 -0.008 0.088 0.991 1.647 0.100
curio_t1 ~~ d_curio_1 -0.024 -0.050 0.002 -0.392 -1.833 0.067
d_curio_1 ~ ppd 0.025 -0.036 0.086 0.095 0.800 0.424
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.738 0.000

The moderation effect of personal project dimensions with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.025, p = 0.424.

7.2.2.2.14 Aesthetic - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8127.044 8215.579 0.987 0.031 0.039
# parameters of interest
params_lcs_aesth_ideal_ppd <- broom::tidy(fit_mi_lcs_aesth_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ ppd", "ppd ~~ ppd", "d_aesth_1 ~ ppd", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.947 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.669 NA NA
d_aesth_1 ~1 -0.002 -0.018 0.014 -0.089 -0.258 0.796
aesth_t1 ~1 3.180 3.051 3.309 93.349 48.188 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 4.215 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.277 -1.794 0.073
d_aesth_1 ~ ppd 0.000 -0.004 0.004 0.008 0.124 0.901
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.743 0.000

The moderation effect of personal project dimensions with the aesthetic change score (ideal-self) is not significantly different from zero, b = 0, p = 0.901.

7.2.2.2.15 Imagination - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7475.448 7563.982 0.934 0.047 0.054
# parameters of interest
params_lcs_imagi_ideal_ppd <- broom::tidy(fit_mi_lcs_imagi_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ ppd", "ppd ~~ ppd", "d_imagi_1 ~ ppd", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.874 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.550 NA NA
d_imagi_1 ~1 0.116 -0.126 0.359 0.561 0.941 0.347
imagi_t1 ~1 4.535 4.300 4.771 13.754 37.732 0.000
d_imagi_1 ~~ d_imagi_1 0.042 0.000 0.084 0.976 1.958 0.050
imagi_t1 ~~ d_imagi_1 -0.004 -0.034 0.026 -0.062 -0.278 0.781
d_imagi_1 ~ ppd -0.042 -0.106 0.021 -0.156 -1.305 0.192
ppd ~~ ppd 0.589 0.505 0.673 1.000 13.737 0.000

The moderation effect of personal project dimensions with the imagination change score (ideal-self) is not significantly different from zero, b = -0.042, p = 0.192.

7.2.2.3 Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_ppd_accept <- bind_rows(
  #traits
  params_lcs_extra_ideal_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_ideal_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_ideal_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_ideal_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_ideal_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_ideal_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_ideal_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_ideal_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_ideal_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_ideal_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_ideal_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_ideal_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_ideal_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_ideal_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_ideal_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_ideal_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_ideal_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_ideal_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_ideal_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_ideal_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20)) %>% 
  select(trait, moderator, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_accept[1:5, ], digits = 3)
trait moderator estimate std.all statistic p.value
extraversion ppd 0.021 0.041 0.628 0.530
agreeableness ppd 0.032 0.077 1.198 0.231
conscientiousness ppd -0.036 -0.079 -1.392 0.164
neuroticism ppd 0.000 -0.001 -0.011 0.991
openness ppd 0.010 0.032 0.445 0.656

No moderator effect significantly differs from zero.

Results summary across the Big Five facets: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_accept[6:20, ], digits = 3)
trait moderator estimate std.all statistic p.value
sociability ppd -0.009 -0.027 -0.305 0.760
assertiveness ppd 0.019 0.073 0.837 0.403
energy ppd -0.012 -0.038 -0.557 0.577
compassion ppd 0.009 0.020 0.175 0.861
respectfulness ppd 0.027 0.088 1.093 0.274
trust ppd 0.003 0.009 0.096 0.923
organization ppd 0.017 0.063 0.877 0.380
productiveness ppd 0.025 0.071 0.925 0.355
responsibility ppd -0.031 -0.063 -0.870 0.384
anxiety ppd -0.012 -0.034 -0.222 0.824
depression ppd 0.009 0.030 0.441 0.660
volatility ppd -0.011 -0.026 -0.263 0.793
curiosity ppd 0.026 0.099 0.941 0.347
aesthetic ppd 0.002 0.056 0.808 0.419
imagination ppd -0.041 -0.153 -1.318 0.187

No moderator effect significantly differs from zero.

7.2.3 Plot

Prepare data frame for plotting:

Show the code
df_table_ppd_plot1 <- bind_rows(
  #traits
  params_lcs_extra_curr_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_curr_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_curr_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_curr_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_curr_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_curr_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_curr_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_curr_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_curr_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_curr_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_curr_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_curr_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_curr_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_curr_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_curr_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_curr_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_curr_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_curr_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_curr_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_curr_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20),
         ref = "self-improvement") %>% 
  select(trait, moderator, ref, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_ppd_plot2 <- bind_rows(
  #traits
  params_lcs_extra_ideal_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_ideal_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_ideal_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_ideal_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_ideal_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_ideal_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_ideal_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_ideal_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_ideal_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_ideal_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_ideal_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_ideal_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_ideal_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_ideal_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_ideal_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_ideal_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_ideal_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_ideal_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_ideal_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_ideal_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20),
         ref = "self-acceptance") %>% 
  select(trait, moderator, ref, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_ppd_plot <- bind_rows(df_table_ppd_plot1, df_table_ppd_plot2)

df_table_ppd_plot <- df_table_ppd_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref2 = factor(ref, levels = c("self-improvement", "self-acceptance"), labels = c("self-improvement", "self-acceptance"))) %>% 
  mutate(moderator = factor("personal project dimensions", levels = c("personal project dimensions"), labels = c("personal project dimensions"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • self-improvement = testing the effect of personal project dimensions as a moderator in the self-improvement group (on current-level trait change)
  • self-acceptance = testing the effect of personal project dimensions as a moderator in the self-acceptance group (on ideal-level trait change)
Show the code
ggplot(df_table_ppd_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ moderator + fct_rev(ref), ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

7.3 Traits that were selected as change goals (c)

We will explore c) whether there are stronger rates of change/acceptance on traits that were selected as change goals than those that were not.

TBD!

7.4 Manipulation check (d)

Does self-improvement intervene on current self trait change (but not ideal self)? Does self-acceptance intervene on ideal self trait change (but not current self)?

Changes in current self traits over time:

Show the code
df_manip_check_curr <- df_sbsa %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_curr_unlist <- as.data.frame(summary(df_manip_check_curr[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_curr)) {
  df_manip_check_curr_unlist <- bind_rows(df_manip_check_curr_unlist, 
                                          as.data.frame(summary(df_manip_check_curr[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_curr_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, str_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, str_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est str_err p sig
extraversion Intercept 2.796 0.038 0.000 ***
extraversion time 0.166 0.026 0.000 ***
extraversion group 0.001 0.053 0.984
extraversion time*group -0.026 0.037 0.488
agreeableness Intercept 3.553 0.032 0.000 ***
agreeableness time 0.076 0.024 0.002 **
agreeableness group 0.016 0.045 0.724
agreeableness time*group 0.018 0.034 0.594
conscientiousness Intercept 3.328 0.041 0.000 ***
conscientiousness time 0.151 0.024 0.000 ***
conscientiousness group 0.056 0.058 0.333
conscientiousness time*group -0.037 0.034 0.282
neuroticism Intercept 3.306 0.045 0.000 ***
neuroticism time -0.192 0.031 0.000 ***
neuroticism group -0.023 0.063 0.717
neuroticism time*group -0.020 0.044 0.645
openness Intercept 3.654 0.033 0.000 ***
openness time 0.082 0.023 0.000 ***
openness group -0.048 0.046 0.293
openness time*group -0.003 0.032 0.934
sociability Intercept 2.469 0.051 0.000 ***
sociability time 0.191 0.036 0.000 ***
sociability group -0.023 0.072 0.753
sociability time*group -0.007 0.050 0.893
assertiveness Intercept 2.855 0.046 0.000 ***
assertiveness time 0.122 0.035 0.000 ***
assertiveness group 0.024 0.065 0.713
assertiveness time*group -0.044 0.048 0.365
energy Intercept 3.063 0.046 0.000 ***
energy time 0.188 0.039 0.000 ***
energy group 0.002 0.064 0.980
energy time*group -0.027 0.054 0.617
compassion Intercept 3.670 0.039 0.000 ***
compassion time 0.052 0.036 0.146
compassion group 0.031 0.055 0.567
compassion time*group 0.013 0.050 0.790
respectfulness Intercept 3.953 0.040 0.000 ***
respectfulness time 0.075 0.032 0.022 *
respectfulness group -0.029 0.056 0.603
respectfulness time*group 0.005 0.045 0.905
trust Intercept 3.035 0.044 0.000 ***
trust time 0.100 0.035 0.005 **
trust group 0.043 0.061 0.481
trust time*group 0.039 0.049 0.433
organization Intercept 3.431 0.054 0.000 ***
organization time 0.125 0.036 0.001 ***
organization group 0.061 0.076 0.419
organization time*group -0.005 0.050 0.924
productiveness Intercept 3.095 0.049 0.000 ***
productiveness time 0.197 0.033 0.000 ***
productiveness group 0.067 0.068 0.325
productiveness time*group -0.045 0.047 0.340
responsibility Intercept 3.456 0.042 0.000 ***
responsibility time 0.128 0.032 0.000 ***
responsibility group 0.041 0.059 0.487
responsibility time*group -0.056 0.045 0.206
anxiety Intercept 3.608 0.048 0.000 ***
anxiety time -0.147 0.039 0.000 ***
anxiety group -0.022 0.067 0.741
anxiety time*group -0.063 0.055 0.251
depression Intercept 3.221 0.054 0.000 ***
depression time -0.280 0.041 0.000 ***
depression group -0.030 0.076 0.691
depression time*group 0.035 0.057 0.535
volatility Intercept 3.088 0.054 0.000 ***
volatility time -0.147 0.042 0.000 ***
volatility group -0.015 0.075 0.837
volatility time*group -0.036 0.058 0.538
curiosity Intercept 3.771 0.040 0.000 ***
curiosity time 0.114 0.034 0.001 ***
curiosity group -0.036 0.056 0.527
curiosity time*group -0.038 0.047 0.425
aesthetic Intercept 3.574 0.044 0.000 ***
aesthetic time 0.045 0.034 0.192
aesthetic group -0.070 0.061 0.247
aesthetic time*group 0.017 0.048 0.730
imagination Intercept 3.618 0.043 0.000 ***
imagination time 0.089 0.033 0.008 **
imagination group -0.039 0.061 0.524
imagination time*group 0.011 0.047 0.817

No significant group effects (higher trait level in self-improvement group at baseline) and also no significant differences in the changes over time in current-self trait levels (timeXgroup). Significant changes over time in current-self trait levels (time) for most domains/facets (independent of intervention group membership).

Changes in ideal self traits over time:

Show the code
df_manip_check_ideal <- df_sbsa %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_ideal")) %>% 
  pivot_longer(ends_with("_comb_ideal"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_ideal_unlist <- as.data.frame(summary(df_manip_check_ideal[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_ideal)) {
  df_manip_check_ideal_unlist <- bind_rows(df_manip_check_ideal_unlist, 
                                          as.data.frame(summary(df_manip_check_ideal[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_ideal_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, str_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, str_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est str_err p sig
extraversion Intercept 3.921 0.027 0.000 ***
extraversion time -0.029 0.024 0.233
extraversion group -0.029 0.037 0.428
extraversion time*group 0.004 0.034 0.918
agreeableness Intercept 4.020 0.030 0.000 ***
agreeableness time -0.011 0.025 0.662
agreeableness group -0.001 0.042 0.980
agreeableness time*group 0.051 0.034 0.137
conscientiousness Intercept 4.392 0.026 0.000 ***
conscientiousness time 0.026 0.024 0.270
conscientiousness group -0.001 0.036 0.977
conscientiousness time*group -0.007 0.033 0.832
neuroticism Intercept 1.749 0.027 0.000 ***
neuroticism time 0.010 0.025 0.696
neuroticism group 0.019 0.037 0.602
neuroticism time*group -0.053 0.035 0.127
openness Intercept 4.104 0.029 0.000 ***
openness time 0.000 0.024 0.996
openness group -0.058 0.040 0.149
openness time*group 0.009 0.034 0.781
sociability Intercept 3.790 0.038 0.000 ***
sociability time -0.086 0.033 0.009 **
sociability group -0.071 0.053 0.178
sociability time*group 0.045 0.046 0.336
assertiveness Intercept 3.843 0.037 0.000 ***
assertiveness time -0.057 0.036 0.115
assertiveness group -0.026 0.051 0.605
assertiveness time*group 0.000 0.050 0.995
energy Intercept 4.130 0.034 0.000 ***
energy time 0.058 0.038 0.129
energy group 0.008 0.047 0.866
energy time*group -0.033 0.053 0.539
compassion Intercept 3.958 0.039 0.000 ***
compassion time -0.002 0.039 0.955
compassion group -0.024 0.054 0.656
compassion time*group 0.043 0.054 0.428
respectfulness Intercept 4.369 0.032 0.000 ***
respectfulness time 0.002 0.030 0.959
respectfulness group 0.004 0.045 0.930
respectfulness time*group 0.035 0.042 0.399
trust Intercept 3.733 0.039 0.000 ***
trust time -0.030 0.036 0.407
trust group 0.014 0.055 0.802
trust time*group 0.077 0.050 0.127
organization Intercept 4.408 0.031 0.000 ***
organization time 0.008 0.032 0.796
organization group -0.013 0.043 0.755
organization time*group 0.051 0.045 0.253
productiveness Intercept 4.514 0.030 0.000 ***
productiveness time 0.040 0.031 0.194
productiveness group -0.011 0.041 0.784
productiveness time*group -0.018 0.043 0.680
responsibility Intercept 4.255 0.034 0.000 ***
responsibility time 0.032 0.032 0.311
responsibility group 0.021 0.047 0.660
responsibility time*group -0.054 0.044 0.220
anxiety Intercept 1.942 0.035 0.000 ***
anxiety time 0.028 0.040 0.485
anxiety group 0.055 0.049 0.261
anxiety time*group -0.118 0.056 0.034 *
depression Intercept 1.528 0.029 0.000 ***
depression time -0.027 0.031 0.378
depression group 0.014 0.041 0.736
depression time*group -0.002 0.043 0.967
volatility Intercept 1.777 0.033 0.000 ***
volatility time 0.030 0.032 0.357
volatility group -0.010 0.046 0.826
volatility time*group -0.044 0.045 0.337
curiosity Intercept 4.092 0.036 0.000 ***
curiosity time 0.016 0.034 0.634
curiosity group -0.065 0.051 0.199
curiosity time*group -0.015 0.047 0.757
aesthetic Intercept 3.817 0.039 0.000 ***
aesthetic time 0.044 0.036 0.224
aesthetic group -0.011 0.054 0.834
aesthetic time*group -0.070 0.051 0.171
imagination Intercept 4.404 0.034 0.000 ***
imagination time -0.058 0.036 0.108
imagination group -0.096 0.048 0.044 *
imagination time*group 0.113 0.050 0.024 *

No significant group effects (higher trait level in self-improvement group at baseline; except for imagination facet) and also no significant differences in the changes over time in ideal-self trait levels (timeXgroup; except for imagination and anxiety facets). No significant changes over time in ideal-self trait levels (time) for most domains/facets (independent of intervention group membership) with the exception of sociability.

7.5 Word cloud of change descriptions (e)

Generate word clouds based on the content from the free-form change descriptions written after the intervention at T2.

Prepare data, separately for each intervention group

Show the code
# see tutorial here: https://towardsdatascience.com/create-a-word-cloud-with-r-bde3e7422e8a

# self-improvement group

# Create a vector containing only the text
text_sb <- df_sbsa %>% filter(!is.na(sb14_01)) %>% pull(sb14_01)
text_sb <- gsub("[\r\n]", " ", text_sb)
# Create a corpus  
docs_sb <- tm::VCorpus(tm::VectorSource(text_sb))

# cleaning the text
docs_sb <- docs_sb %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_sb <- tm_map(docs_sb, content_transformer(tolower))
docs_sb <- tm_map(docs_sb, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_sb <- TermDocumentMatrix(docs_sb) 
matrix_sb <- as.matrix(dtm_sb) 
words_sb <- sort(rowSums(matrix_sb), decreasing=TRUE) 
df_words_sb <- data.frame(word = names(words_sb), freq=words_sb)
# remove a few of the frequent "non-words"
df_words_sb <- df_words_sb %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

# self-acceptance group

# Create a vector containing only the text
text_sa <- df_sbsa %>% filter(!is.na(sa13_01)) %>% pull(sa13_01)
text_sa <- gsub("[\r\n]", " ", text_sa)
# Create a corpus  
docs_sa <- tm::VCorpus(tm::VectorSource(text_sa))

# cleaning the text
docs_sa <- docs_sa %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_sa <- tm_map(docs_sa, content_transformer(tolower))
docs_sa <- tm_map(docs_sa, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_sa <- TermDocumentMatrix(docs_sa) 
matrix_sa <- as.matrix(dtm_sa) 
words_sa <- sort(rowSums(matrix_sa), decreasing=TRUE) 
df_words_sa <- data.frame(word = names(words_sa), freq=words_sa)
# remove a few of the frequent "non-words"
df_words_sa <- df_words_sa %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

Generate the word cloud: for self-improvement group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_sb$word, freq = df_words_sb$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Generate the word cloud: for self-acceptance group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_sa$word, freq = df_words_sa$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Lastly, delete free-form text variables again from data set

df_sbsa <- df_sbsa %>% select(-c(sb14_01, sa13_01))
base::save(df_sbsa, file = "data/df_sbsa.rda")